背景
我們的CI/CD流程采用了argoCD與droneCI兩款工具,droneCI的關鍵檔案是drone.yaml檔案,配置在開發代碼裡。 argoCD的關鍵是helm包和不同環境的values.yaml參數。兩者需要打通起來,讓開發人員專注送出業務代碼,後續程式的自動更新,部署等問題不影響他們。
流程圖

droneCI需要修改的部分
---
kind: pipeline
type: kubernetes
name: argocd
steps:
- name: argocd deploy
image: drone-argocd-plugin(自己制作的,就是一個ubuntu基礎鏡像,裡面安裝了一個argocd-cli工具)
environment:
ARGOCD_AUTH_TOKEN:
from_secret: argocd_auth_token
ARGOCD_SERVER:
from_secret: argocd_server
commands:
- argocd --insecure app set 應用程式名 -p 應用鏡像tag号=git-${DRONE_COMMIT_SHA:0:10}
- argocd --insecure app sync 應用程式名
depends_on:
- push
trigger:
branch:
- develop
event:
- push
---
kind: secret
name: argocd_server
get:
path: drone/data/argocd
name: server
---
kind: secret
name: argocd_auth_token
get:
path: drone/data/argocd
name: auth_token
這塊代碼的主要作用就是,在drone推送鏡像到私有倉庫之後,通過argocd的cli工具,加載argocd的登入資訊,對argocd上,需要更新的應用程式設定鏡像tag号,然後觸發更新操作,完成自動更新
argoCD需要準備的内容
1.準備一個git倉庫如下圖。helm目錄下放置需要部署的應用程式的所有helm檔案夾,node目錄放置每個節點叢集需要的values.yaml檔案,如開發環境是dev.yaml,測試環境是test.yaml,生産環境是prod.yaml
2.在argoCD上部署應用app,如下圖所示,隻要設定好對應的git倉庫,helm路徑,values路徑即可
(此處也是筆者踏了很多坑得出的結論,最好使用git和submodule的方式來管理,不要使用harbor倉庫等方式管理helm和values,因為argocd有一些設定是不符合使用習慣的,除非這個pr被合并
https://github.com/argoproj/argo-cd/pull/6280)全部打通完成之後,開發人員隻要正常送出代碼,通過sonarqube等掃描工具之後,代碼合入develop分支之後,會觸發argoCD根據git-hash自動更新,更新完成會在gitea的代碼倉庫上打一個小綠标,全程無人值守,666