Os clusters de workflow são um service Argo Workflows totalmente gerenciado, desenvolvido com base no projeto open source Argo Workflows. Eles oferecem dimensionamento elástico e zero sobrecarga de O&M, permitindo pipelines de CI mais simples, econômicos e eficientes. Este tópico descreve como criar um pipeline de CI Golang em um workflow cluster utilizando cache do BuildKit e cache de módulos Go armazenado no NAS.
Visão geral da solução
Em um workflow cluster, o pipeline utiliza o BuildKit para compilar e enviar imagens de contêiner, o BuildKit Cache para acelerar as compilações e o cache de módulos Go no NAS para agilizar os comandos go test e go build.
Modelo de workflow predefinido
Um workflow cluster inclui um modelo de workflow de CI predefinido (ClusterWorkflowTemplate) chamado ci-go-v1. Esse modelo usa o BuildKit Cache e o cache de módulos Go no NAS para acelerar o pipeline de CI.
Use o modelo predefinido diretamente ou personalize-o conforme a necessidade do seu workflow de CI.
O modelo predefinido inclui as seguintes etapas:
-
Git clone & checkout
Clona um repositório git e faz o checkout da branch de destino.
Obtém o ID do commit e o anexa à tag da imagem.
-
Execute go test
Executa todos os casos de teste no projeto Go por padrão.
Utilize
enable_testpara controlar a execução desta etapa.Armazena o cache de módulos Go em
/pkg/modno NAS, acelerando ogo teste ogo build.
-
Build & push image
Compila e envia a imagem de contêiner com o BuildKit, usando cache do tipo registry para acelerar as compilações.
Formato padrão da tag da imagem:
{container_tag}-{commit_id}. Um parâmetro do workflow controla se o ID do commit será anexado.Envia também uma imagem com a tag
latest, substituindo a anterior.
Pré-requisitos
Etapa 1: Criar uma credencial de acesso ao Container Registry
Obtain the kubeconfig file for the cluster and use kubectl to connect to the cluster.
Configure the access credential para a instância do ACR EE. Para acesso via domínio de Virtual Private Cloud (VPC), garanta que o cluster e o registro estejam na mesma VPC. Para acesso via domínio público, configure public access control.
-
Substitua
USER_NAME:PASSWORDpela sua credencial de acesso ao ACR EE e execute o comando para criar um Secret no workflow cluster destinado ao BuildKit.kubectl create secret generic docker-config --from-literal="config.json={\"auths\": {\"$repositoryDomain\": {\"auth\": \"$(echo -n USER_NAME:PASSWORD|base64)\"}}}"O Secret e o volume NAS devem estar no mesmo namespace do workflow que você enviar.
Etapa 2: Montar um volume NAS
Um volume NAS compartilha dados entre as tarefas do workflow, como os dados clonados do repositório, e armazena o cache de módulos Go para acelerar o go test e o go build.
Faça login no NAS console.
No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione o grupo de recursos e a região onde seu sistema de arquivos está localizado.
Na página File System List, localize o sistema de arquivos desejado e clique em Manage na coluna Actions.
Na página de detalhes do sistema de arquivos, clique na aba Mount Targets. Na seção Mount Target, anote o ponto de montagem do NAS.
-
Salve o YAML abaixo como pv-nas.yaml, substitua MOUNT_POINT pelo seu ponto de montagem do NAS e execute
kubectl apply -f pv-nas.yamlpara criar o volume.apiVersion: v1kind: 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
Etapa 3: Iniciar um workflow
Console
Faça login no Argo Workflow Clusters console.
Na página Cluster Information, clique na aba Basic Information. Na seção Common Operations, clique em Workflow Console (Argo).
No painel de navegação à esquerda da interface do Argo, clique em Cluster Workflow Templates e, em seguida, clique em ci-go-v1.
-
Na página de detalhes do modelo, clique em + SUBMIT. Insira os parâmetros necessários no painel e clique em + SUBMIT.
Defina os parâmetros com base no parameter description.
No painel Submit Workflow, defina Entrypoint como
maine especifique os seguintes parâmetros:repo_url: a URL do repositório git, por exemplo
https://github.com/ivan-cai/echo-server.git.repo_name: o nome do repositório, por exemplo
echo-server.target_branch: a branch de destino, por exemplo
main.container_image: a URL da imagem de contêiner.
container_tag: a tag da imagem, por exemplo
v1.0.0.dockerfile: o caminho para o Dockerfile, por exemplo
./Dockerfile.enable_suffix_commitid: define se o ID do commit deve ser anexado à tag da imagem, por exemplo
true.enable_test: define se a etapa de teste deve ser executada, por exemplo
true.
Após especificar os parâmetros, clique em +SUBMIT na parte inferior do painel para enviar o workflow.
Após o envio, visualize o status do workflow na página Workflows:
Depois que o workflow for enviado, o DAG do workflow será exibido na página de detalhes de Workflows. Os nós das etapas, de cima para baixo, são git-checkout-pr, run-test e build-push-image. Uma marca de verificação verde em cada nó indica que o workflow foi concluído com sucesso.
Argo CLI
-
Atualize os valores dos parâmetros com base no parameter description. Salve o YAML abaixo como
workflow.yamle executeargo submit workflow.yamlpara enviar o workflow.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