基于k8s的Jenkins CI/CD平臺部署實踐(三):集成ArgoCD實現持續部署
文章目錄
- 基于k8s的Jenkins CI/CD平臺部署實踐(三):集成ArgoCD實現持續部署
- 一、Argocd簡介
- 二、安裝Helm
- 三、Helm安裝ArgoCD實戰
- 1. 添加ArgoCD官方倉庫
- 2. 創建argocd命名空間
- 3. 安裝ArgoCD
- 4. 安裝ArgoCD-cli
- 5. 驗證ArgoCD-Pod狀態
- 四、ArgoCD頁面配置
- 1. 查看外部訪問端口
- 2. 訪問ui頁面和配置
- 3. 創建ArgoCD應用
- 五、Jenkins集成ArgoCD
- 1. 流水線設計
- 總結
在前兩篇文章中,我們已完成 Jenkins 在 Kubernetes 環境中的部署與流水線構建,實現了代碼的持續集成與鏡像構建。為了進一步提升部署自動化能力,本篇將引入 GitOps 工具 ArgoCD,并與 Jenkins 流水線集成,構建從代碼提交到自動部署的完整 CI/CD 流程。通過 ArgoCD 實現基于 Git 倉庫的聲明式部署,我們不僅能夠提升交付效率,還能確保環境一致性和部署可追溯性,為平臺穩定性和可維護性提供有力支撐。
一、Argocd簡介
ArgoCD 是一款基于 GitOps 模式的持續部署工具,專為 Kubernetes 場景設計。它通過監聽 Git 倉庫中的應用聲明文件(如 Kubernetes YAML/Helm/Kustomize 等),實現集群中資源的自動同步與狀態管理。與傳統的手動或腳本式部署方式不同,ArgoCD 將“部署即代碼”理念貫徹到底,使部署流程標準化、可追溯、易于回滾。其提供了豐富的 Web UI、命令行工具和 API 支持,方便開發團隊對應用的部署狀態進行可視化管理與操作。
📌 說明:本實踐中 ArgoCD 是通過 Helm Chart 進行安裝部署的。這種方式便于版本控制和集中化配置管理,更適合中大型團隊的自動化部署場景。
二、安裝Helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
# 驗證安裝
helm version
三、Helm安裝ArgoCD實戰
1. 添加ArgoCD官方倉庫
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
2. 創建argocd命名空間
kubectl create argocd
3. 安裝ArgoCD
# 查看想要安裝的版本
helm search repo argo/argo-cd --versions | head -n 20# 下載并解壓指定版本的 ArgoCD Helm Chart,便于查看或自定義配置后再安裝
helm pull argo/argo-cd --version 7.8.24 --untar
vim argocd/values.yaml #修改成你需要的配置# 使用Helm 安裝 ArgoCD
helm install argocd ./argo-cd -n argocd
4. 安裝ArgoCD-cli
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
mv argocd-linux-amd64 argocd
chmod 755 argocd
mv argocd /usr/bin/
5. 驗證ArgoCD-Pod狀態
kubectl get pod -n argocd
四、ArgoCD頁面配置
1. 查看外部訪問端口
kubectl get svc -n argocd
2. 訪問ui頁面和配置
訪問地址:http://ip:30080
初始賬號:admin
初始密碼:kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d# 提供git倉庫訪問憑證,這里不配置的話后續配置ui頁面會報錯
argocd login ip:30080 \--username admin \--password aaa98224 \ #密碼是因為我改成aaa98224--insecure# 添加 Git 倉庫認證信息到 Argo CD
argocd repo add http://192.168.100.100/yw/hwj.git \ #gitlab倉庫地址--username root \--password 'gitlab.hwj' #gitlab倉庫密碼
3. 創建ArgoCD應用
前置條件:Gitlab倉庫創建K8s資源文件目錄和放入資源文件
創建ArgoCD應用
配置好了以后如下圖所示,點擊同步
同步成功,Pod自動部署完成
五、Jenkins集成ArgoCD
1. 流水線設計
pipeline {agent anyenvironment {git_address = "http://192.168.100.100/yw/hwj.git" // gitlab倉庫地址git_auth = "jenkins-to-gitlab" // Jenkins中配置的GitLab憑據IDdocker_build_host = "192.168.100.30" // 構建鏡像主機branch_name = "master"// BUILD_NUMBER 是 Jenkins 的內置環境變量,代表當前構建的編號(遞增)// 例如第一次構建為 1,第二次為 2,用于版本號控制}stages {stage('清空工作目錄') {steps {echo '清理工作目錄...'deleteDir()}}stage('拉取代碼') {steps {checkout([$class: 'GitSCM',branches: [[name: "*/${branch_name}"]],doGenerateSubmoduleConfigurations: false,extensions: [],submoduleCfg: [],userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])}}stage('代碼打包') {steps {sh "mvn -U clean package -Dmaven.test.skip=true"}}stage('傳輸 Jar 包到 Docker 主機') {steps {sh """scp -rp hwj-main/target/hwj-main.jar root@${docker_build_host}:/root/docker-build/hwj/"""}}stage('Docker 主機構建鏡像') {steps {sh """ssh root@${docker_build_host} 'cd /root/docker-build/hwj &&docker build -t harbor.local/k8s/hwj:v1.0.${BUILD_NUMBER} . &&docker push harbor.local/k8s/hwj:v1.0.${BUILD_NUMBER}'"""}}stage('更新 YAML 并提交 Git') {steps {script {def newTag = "v1.0.${BUILD_NUMBER}"def yamlPath = "k8s/hwj/hwj-deploy.yaml" // gitlab倉庫中存放K8s資源文件的目錄def imageLine = "image: harbor.local/k8s/hwj:${newTag}"// 修改 YAML 鏡像地址sh "sed -i 's|image: harbor.local/k8s/hwj:.*|${imageLine}|' ${yamlPath}"// 使用憑據進行 Git 提交和推送withCredentials([usernamePassword(credentialsId: "${git_auth}", usernameVariable: 'GIT_USER', passwordVariable: 'GIT_PASS')]) {sh """git config user.name 'hwj'git config user.email 'hwj@940415171.com'git remote set-url origin http://$GIT_USER:$GIT_PASS@192.168.100.100/yw/hwj.gitgit add ${yamlPath}git commit -m '更新鏡像版本為 ${newTag}' || echo "No changes to commit"git push origin HEAD:${branch_name}"""}}}}}
}
再次同步 ArgoCD,這里也可以配置自動同步,每次 Jenkins 推送 YAML 改動后即可自動完成部署
總結
本篇文章基于前兩篇 Jenkins CI/CD 系列的內容,進一步集成了 ArgoCD 實現自動部署能力:
? 使用 Helm 安裝 ArgoCD,便于版本管理和企業級配置維護
? 配置 ArgoCD 與 Git 倉庫同步,構建 GitOps 部署模型
? 利用 Jenkins 流水線自動更新部署清單,實現構建即部署