天天看點

argoCD與droneCI結合

背景

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

流程圖

argoCD與droneCI結合

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

argoCD與droneCI結合

2.在argoCD上部署應用app,如下圖所示,隻要設定好對應的git倉庫,helm路徑,values路徑即可

argoCD與droneCI結合

(此處也是筆者踏了很多坑得出的結論,最好使用git和submodule的方式來管理,不要使用harbor倉庫等方式管理helm和values,因為argocd有一些設定是不符合使用習慣的,除非這個pr被合并

https://github.com/argoproj/argo-cd/pull/6280)

全部打通完成之後,開發人員隻要正常送出代碼,通過sonarqube等掃描工具之後,代碼合入develop分支之後,會觸發argoCD根據git-hash自動更新,更新完成會在gitea的代碼倉庫上打一個小綠标,全程無人值守,666