工作流程叢集基於開源Argo Workflows專案構建,全託管Argo Workflows,具有極致彈性、自動擴充、無營運成本等優勢,可以快速實現更簡單、低成本、高效率的CI流水線。本文介紹如何基於工作流程叢集構建Golang專案的CI Pipeline。
方案介紹
工作流程叢集構建CI Pipeline時,主要使用BuildKit實現容器鏡像的構建和推送,並使用BuildKit Cache加速鏡像的構建。使用NAS儲存Go mod cache,可加速go test和go build運行過程,最終大幅加速CI Pipeline的流程。
預置工作流程範本說明
工作流程叢集中預設已經預置了名為ci-go-v1的CI工作流程範本(ClusterWorkflowTemplate),其使用BuildKit Cache和NAS儲存Go mod cache,可大幅加速CI Pipeline的流程。
可以直接使用預置模板,也可以基於預置模板自訂自己的CI工作流程範本。
預置的CI工作流程範本中包含以下流程:
Git Clone & Checkout
用於Clone Git倉庫,將Git倉庫Checkout到目標分支。
擷取Commit ID,在構建鏡像時根據Commit ID追加Tag尾碼。
Run Go Test
預設運行Git Repo(Go專案)中的所有測試案例。
可通過工作流程參數
enable_test控制是否運行該步驟。其中Go mod cache儲存在NAS的
/pkg/mod目錄,用於go test和後續的go build的加速。
Build & Push Image
使用BuildKit構建和推送容器鏡像,並使用BuildKit Cache中registry類型的cache來加速鏡像構建。
鏡像Tag預設使用
{container_tag}-{commit_id}格式,可在提交工作流程時通過參數控制是否追加Commit ID。推送鏡像的同時,也會推送覆蓋對應版本的鏡像。
準備工作
如果在工作流程的CI Pipeline中使用的是私人Git倉庫,則需在CI Pipeline中Clone私人Git倉庫。
步驟一:在工作流程叢集中建立ACR企業版執行個體訪問憑證
為ACR企業版執行個體配置訪問憑證。如果使用VPC網域名稱訪問,請確保叢集與ACR倉庫在同一個VPC網路內,如果通過公網網域名稱訪問,請配置公網的存取控制。
替換下方命令中的
USER_NAME:PASSWORD為ACR企業版執行個體的訪問憑證,然後執行命令,在工作流程叢集中建立Secret,供BuildKit使用。Secret、掛載的NAS儲存卷都需要與最終提交的工作流程處於同一命名空間。
kubectl create secret generic docker-config --from-literal="config.json={\"auths\": {\"$repositoryDomain\": {\"auth\": \"$(echo -n USER_NAME:PASSWORD|base64)\"}}}"
步驟二:在工作流程叢集中掛載NAS儲存卷
使用NAS儲存卷在工作流程的各任務之間共用資料,如Clone的代碼倉庫資訊等,並儲存Go mod cache,用於加速CI Pipeline中的go test和go build過程。
登入NAS控制台。
在左側導覽列,選擇。
在頁面左側頂部,選擇目標檔案系統所在的資源群組和地區。

在檔案系統列表頁面,單擊目標檔案系統操作列的管理。
在檔案系統詳情頁面,單擊左側的掛載使用頁簽,然後在掛載點地區,查看並記錄NAS的掛載點。
將下方樣本儲存到pv-nas.yaml,將MOUNT_POINT替換為NAS掛載點地址,然後執行
kubectl apply -f pv-nas.yaml建立儲存卷。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 # 必須與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
步驟三:基於預置模板啟動工作流程
通過控制台提交工作流程
在叢集資訊頁面,單擊基礎資訊頁簽,然後在下方常用操作地區,單擊工作流程控制台(Argo)。
在Argo工作台左側導覽列單擊Cluster Workflow Templates,然後單擊ci-go-v1預置模板名稱。

在模板詳情頁左上方單擊+ SUBMIT,然後在彈出的面板中填寫相關參數,並在面板下方單擊+ SUBMIT。
參數填寫請參考模板參數說明將參數值設定為實際使用的參數值。

操作完成後,在Workflows詳情頁查看工作流程運行情況:

通過Argo CLI提交工作流程
將下方樣本儲存到
workflow.yaml,按照模板參數說明將參數值修改為您實際使用的參數值,然後執行argo submit workflow.yaml提交工作流程。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