Los clústeres de flujo de trabajo son un servicio de Argo Workflows completamente administrado. Están basados en el proyecto de código abierto Argo Workflows y ofrecen escalado elástico sin sobrecarga de operación y mantenimiento. Esto permite crear pipelines de CI más sencillos, económicos y eficientes. Este tema describe cómo compilar un pipeline de CI de Golang en un clúster de flujo de trabajo mediante la caché de BuildKit y una caché de módulos de Go almacenada en NAS.
Descripción general de la solución
En un clúster de flujo de trabajo, el pipeline utiliza BuildKit para compilar y enviar imágenes de contenedor. Además, emplea BuildKit Cache para acelerar las compilaciones y una caché de Go mod almacenada en NAS para agilizar go test y go build.
Plantilla de flujo de trabajo preconfigurada
Un clúster de flujo de trabajo incluye una plantilla de flujo de trabajo de CI preconfigurada (ClusterWorkflowTemplate) llamada ci-go-v1. Esta plantilla usa BuildKit Cache y una caché de Go mod almacenada en NAS para acelerar el pipeline de CI.
Utilice la plantilla preconfigurada directamente o personalícela según su flujo de trabajo de CI.
La plantilla preconfigurada incluye los siguientes pasos:
-
Git clone & checkout
Clona un repositorio de Git y extrae la rama de destino.
Obtiene el ID del commit y lo agrega a la etiqueta de la imagen.
-
Run go test
De forma predeterminada, ejecuta todos los casos de prueba del proyecto de Go.
Use
enable_testpara controlar si se ejecuta este paso.Almacena la caché de Go mod en
/pkg/moddentro de NAS para acelerargo testygo build.
-
Build & push image
Compila y envía la imagen de contenedor con BuildKit. Utiliza una caché de tipo registro para acelerar las compilaciones.
Formato predeterminado de la etiqueta de imagen:
{container_tag}-{commit_id}. Un parámetro del flujo de trabajo controla si se agrega el ID del commit.También envía una imagen con la etiqueta
latesty sobrescribe la anterior.
Requisitos previos
Create a Container Registry Enterprise Edition instance (ACR EE).
Para los repositorios privados de Git, configure the workflow to clone the repository.
Paso 1: Crear una credencial de acceso de Container Registry
Obtain the kubeconfig file for the cluster and use kubectl to connect to the cluster.
Configure the access credential para la instancia de ACR EE. Para acceder mediante el dominio de Virtual Private Cloud (VPC), asegúrese de que el clúster y el registro estén en la misma VPC. Para acceder mediante el dominio público, configure public access control.
-
Reemplace
USER_NAME:PASSWORDcon su credencial de acceso de ACR EE. Luego, ejecute el comando para crear un Secret en el clúster de flujo de trabajo destinado a BuildKit.kubectl create secret generic docker-config --from-literal="config.json={\"auths\": {\"$repositoryDomain\": {\"auth\": \"$(echo -n USER_NAME:PASSWORD|base64)\"}}}"El Secret y el volumen de NAS deben estar en el mismo espacio de nombres que el flujo de trabajo que envíe.
Paso 2: Montar un volumen de NAS
Un volumen de NAS comparte datos entre las tareas del flujo de trabajo, como los datos del repositorio clonado. También almacena la caché de Go mod para acelerar go test y go build.
Inicie sesión en la consola de NAS.
En el panel de navegación izquierdo, seleccione .
En la barra de navegación superior, seleccione el resource group y la región donde se encuentra su sistema de archivos.
En la página File System List, busque el sistema de archivos de destino y haga clic en Manage en la columna Actions.
En la página de detalles del sistema de archivos, haga clic en la pestaña Mount Targets. En la sección Mount Target, registre el punto de montaje de NAS.
Guarde el siguiente YAML como pv-nas.yaml, reemplace MOUNT_POINT con su punto de montaje de NAS y ejecute
kubectl apply -f pv-nas.yamlpara crear el volumen.apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 100Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas # Must be the same as the PV name. volumeAttributes: server: MOUNT_POINT path: "/" mountOptions: - nolock,tcp,noresvport - vers=3 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi selector: matchLabels: alicloud-pvname: pv-nas
Paso 3: Iniciar un flujo de trabajo
Console
Inicie sesión en la consola de Argo Workflow Clusters.
En la página Cluster Information, haga clic en la pestaña Basic Information. En la sección Common Operations, haga clic en Workflow Console (Argo).
En el panel de navegación izquierdo de la interfaz de Argo, haga clic en Cluster Workflow Templates y luego en ci-go-v1.
-
En la página de detalles de la plantilla, haga clic en + SUBMIT. Introduzca los parámetros obligatorios en el panel y haga clic en + SUBMIT.
Establezca los parámetros según parameter description.
En el panel Submit Workflow, establezca Entrypoint en
mainy especifique los siguientes parámetros:repo_url: la URL del repositorio de Git, por ejemplo,
https://github.com/ivan-cai/echo-server.git.repo_name: el nombre del repositorio, por ejemplo,
echo-server.target_branch: la rama de destino, por ejemplo,
main.container_image: la URL de la imagen de contenedor.
container_tag: la etiqueta de la imagen, por ejemplo,
v1.0.0.dockerfile: la ruta del Dockerfile, por ejemplo,
./Dockerfile.enable_suffix_commitid: indica si se agrega el ID del commit a la etiqueta de la imagen, por ejemplo,
true.enable_test: indica si se ejecuta el paso de prueba, por ejemplo,
true.
Después de especificar los parámetros, haga clic en +SUBMIT en la parte inferior del panel para enviar el flujo de trabajo.
Una vez enviado, consulte el estado del flujo de trabajo en la página Workflows:
Tras enviar el flujo de trabajo, se muestra el DAG en la página de detalles de Workflows. Los nodos de los pasos, de arriba hacia abajo, son git-checkout-pr, run-test y build-push-image. Una marca de verificación verde en cada nodo indica que el flujo de trabajo se completó correctamente.
Argo CLI
-
Actualice los valores de los parámetros según parameter description. Guarde el siguiente YAML como
workflow.yamly ejecuteargo submit workflow.yamlpara enviar el flujo de trabajo.apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: ci-go-v1- labels: workflows.argoproj.io/workflow-template: ackone-ci spec: arguments: parameters: - name: repo_url value: https://github.com/ivan-cai/echo-server.git - name: repo_name value: echo-server - name: target_branch value: main - name: container_image value: "test-registry.cn-hongkong.cr.aliyuncs.com/acs/echo-server" - name: container_tag value: "v1.0.0" - name: dockerfile value: ./Dockerfile - name: enable_suffix_commitid value: "true" - name: enable_test value: "true" workflowTemplateRef: name: ci-go-v1 clusterScope: true