基于k8s的Jenkins CI/CD平台部署实践(三):集成ArgoCD实现持续部署

基于k8s的Jenkins CI/CD平台部署实践(三):集成ArgoCD实现持续部署


在前两篇文章中,我们已完成 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 any
    environment {
        git_address = "http://192.168.100.100/yw/hwj.git"    // gitlab仓库地址
        git_auth = "jenkins-to-gitlab"     // Jenkins中配置的GitLab凭据ID
        docker_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.git
                            git 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 流水线自动更新部署清单,实现构建即部署

Kubernetes (k8s) 是一种流行的容器编排平台,可以大大简化应用程序的部署和管理。CI/CD(持续集成/持续交付)管道是软件开发过程中的关键环节,可以将代码从开发到部署的流程自动化和加速。在 k8s部署 CI/CD 管道的步骤如下: 1. 创建代码仓库。您可以使用 Git 或其他版本控制工具。确保您的代码仓库可以与 CI/CD 工具集成。 2. 配置 CI 工具。这可以是 Jenkins、GitLab CI、CircleCI 等等。您需要将 CI 工具配置为从代码仓库拉取代码,并将其构建为容器镜像。确保您的 CI 工具可以与 Kubernetes 集群通信。 3. 配置 Docker Registry。您需要一个 Docker Registry 来存储构建的容器镜像,以便它们可以在 Kubernetes 集群中使用。您可以使用 Docker Hub、Google Container Registry、AWS ECR 等等。 4. 创建 Kubernetes 资源定义文件。这些文件告诉 Kubernetes 如何部署和管理您的应用程序。确保您的资源定义文件包含必要的配置和环境变量,以及指向您的 Docker Registry 的正确信息。 5. 部署应用程序。使用 kubectl 工具将 Kubernetes 资源定义文件应用于 Kubernetes 集群。 6. 配置 CD 工具。这可以是 Helm、Spinnaker、Argo CD 等等。您需要将 CD 工具配置为从 Docker Registry 拉取构建的容器镜像,并将其部署Kubernetes 集群。确保您的 CD 工具可以与 Kubernetes 集群通信。 7. 自动化部署。使用 CD 工具将新版本的应用程序自动部署Kubernetes 集群中。 总的来说,上述步骤是一个基本的 CI/CD 管道部署过程。当然,具体实现方式会因不同的应用程序和工具而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值