Linux运维:Jenkins+Argocd

Jenkins + ArgoCD 完整配合流程(GitOps 标准架构)

这是当前云原生最主流的 CI/CD 架构 ,也是面试必考点。核心逻辑是:Jenkins 负责 CI(构建打包),ArgoCD 负责 CD(部署同步),两者通过 Git 仓库解耦,实现真正的 GitOps。


一、核心分工(一句话讲清楚)

  • Jenkins :只做代码提交→编译→测试→构建镜像→推送镜像这部分(纯CI)
  • ArgoCD :只做Git仓库配置→同步到K8s集群这部分(纯CD)
  • 中间桥梁:Git 仓库(专门存放 K8s 部署配置文件,如 Deployment、Service 等)

和纯 Jenkins 部署的本质区别

  • 纯 Jenkins:Jenkins 直接调用 kubectl apply 部署到集群
  • Jenkins+ArgoCD:Jenkins 只更新 Git 仓库里的镜像标签,ArgoCD 自动把 Git 状态同步到集群

二、完整部署流程(面试必背)

复制代码
开发者提交代码 → Git代码仓库 → Jenkins自动触发 → 拉取代码 → 编译打包 → 构建镜像 → 推送镜像仓库 → Jenkins更新Git配置仓库的镜像标签 → ArgoCD检测到Git变化 → 自动同步到K8s集群 → 验证部署状态 → 通知结果

三、详细步骤(实战+面试通用)

前置准备(一次性配置)

  1. 两个 Git 仓库
    • 代码仓库:存放业务代码(如 Spring Boot、前端代码)
    • 配置仓库:专门存放 K8s 部署文件(deployment.yamlservice.yaml 等)
  2. ArgoCD 部署:在 K8s 集群中安装 ArgoCD,创建应用并关联配置仓库
  3. Jenkins 配置:安装 Git、Docker、Pipeline 插件,配置代码仓库、镜像仓库、配置仓库的凭证

步骤1:Jenkins 执行 CI 流程

和之前纯 Jenkins 流程完全一样,直到推送镜像完成

  1. 开发者提交代码到代码仓库
  2. Git 通过 Webhook 触发 Jenkins 构建
  3. Jenkins 拉取代码、编译打包、运行单元测试
  4. 构建 Docker 镜像,打上版本号(如 v1.0.0-${BUILD_NUMBER}
  5. 推送镜像到 Harbor/Docker Hub 镜像仓库

步骤2:Jenkins 更新 Git 配置仓库(关键桥梁)

这是和纯 Jenkins 部署唯一不同的地方

Jenkins 不直接部署到集群,而是修改配置仓库中 deployment.yaml 里的镜像标签,然后提交推送到 Git。

示例 Pipeline 代码(更新镜像标签)
groovy 复制代码
stage('更新Git配置仓库') {
    steps {
        // 克隆配置仓库
        git url: 'https://git.example.com/demo/k8s-config.git', branch: 'main', credentialsId: 'git-config-credential'
        
        // 替换deployment.yaml中的镜像标签
        sh """
            sed -i "s|image: harbor.example.com/demo/spring-boot-demo:.*|image: harbor.example.com/demo/spring-boot-demo:${IMAGE_TAG}|g" deployment.yaml
        """
        
        // 提交并推送修改
        sh """
            git config user.name "jenkins"
            git config user.email "jenkins@example.com"
            git add deployment.yaml
            git commit -m "Update image to ${IMAGE_TAG}"
            git push origin main
        """
    }
}

步骤3:ArgoCD 自动同步部署

ArgoCD 会每隔3分钟(可配置)轮询 Git 配置仓库,一旦发现配置文件有变化,就会自动将最新的配置同步到 K8s 集群。

ArgoCD 工作原理:
  1. 持续对比 Git 仓库中的期望状态K8s 集群中的实际状态
  2. 如果不一致,自动执行 kubectl apply 将集群状态同步为 Git 状态
  3. 支持自动同步、手动同步、回滚到任意 Git 提交版本

步骤4:验证与通知

  1. ArgoCD 同步完成后,Jenkins 可以调用 ArgoCD API 验证部署状态
  2. 通过钉钉/企业微信通知团队部署结果
  3. 运行自动化测试验证服务可用性

四、为什么要这么配合?(面试必问优势)

  1. 配置可追溯:所有部署变更都记录在 Git 中,谁改了、改了什么、什么时候改的一目了然
  2. 回滚极其简单 :出问题直接回滚到 Git 上的任意一个提交版本,比 kubectl rollout undo 更可靠
  3. 权限分离:Jenkins 不需要 K8s 集群的操作权限,只需要 Git 仓库权限,安全性更高
  4. 集群状态一致:ArgoCD 会持续保证集群状态和 Git 一致,防止有人手动修改集群配置导致不一致
  5. 多环境管理方便:不同环境(dev/test/prod)对应 Git 不同分支,ArgoCD 分别同步

五、面试标准答案

Jenkins 和 ArgoCD 是 CI 和 CD 的最佳组合,采用 GitOps 架构:

Jenkins 负责持续集成,当开发者提交代码后,自动完成代码拉取、编译打包、测试、构建镜像并推送到镜像仓库,然后更新 Git 配置仓库中的镜像标签。

ArgoCD 负责持续部署,它会持续监控 Git 配置仓库的变化,一旦发现配置更新,就自动将最新的部署配置同步到 K8s 集群,保证集群状态和 Git 仓库中的期望状态一致。

这种架构实现了 CI 和 CD 的解耦,具有配置可追溯、回滚方便、安全性高、多环境管理简单等优势,是当前云原生环境下的标准 CI/CD 方案。


一、核心澄清

这两个都是Git代码仓库,不是部署在Jenkins或K8s机器上,而是统一托管在Git服务器(GitLab/GitHub/Gitee)上,Jenkins和ArgoCD都是从这个Git服务器拉取代码和配置。


二、生产环境标准:必须分开成两个独立仓库

这是GitOps架构的核心最佳实践,也是面试必答点:

  1. 权限严格分离
    • 开发人员只能提交代码到代码仓库,没有配置仓库的修改权限
    • 只有DevOps/运维人员才能修改配置仓库,防止开发人员随意改动生产环境的部署参数
  2. 变更完全隔离
    • 代码提交只会触发CI构建,不会影响集群部署
    • 配置变更(如调整副本数、修改环境变量)只会触发ArgoCD同步,不会重新编译打包
  3. 多环境管理清晰
    • 配置仓库用不同分支/目录对应不同环境(dev/test/prod)
    • 代码仓库用feature分支开发,合并到main分支触发构建
  4. 审计追溯方便
    • 代码变更和配置变更分开记录,出问题时能快速定位是代码问题还是配置问题

四、绝对不要做的事

  1. ❌ 不要把K8s配置文件直接写在Jenkins Pipeline里
  2. ❌ 不要把密码、密钥等敏感信息直接存在配置仓库
  3. ❌ 不要让开发人员拥有生产环境配置仓库的写入权限

面试标准答案

生产环境中,代码仓库和配置仓库应该是两个完全独立的Git仓库,托管在统一的Git服务器上。这样可以实现权限分离、变更隔离和清晰的多环境管理,符合GitOps的最佳实践。小型测试项目为了方便,可以将配置文件放在代码仓库的单独目录下。

相关推荐
2401_834636991 小时前
Linux 负载均衡全实战:Nginx+HAProxy+LVS 从原理到落地
linux·nginx·负载均衡
鹏大师运维6 小时前
为什么信创电脑装软件总提示“软件包架构不匹配”?
linux·运维·架构·国产化·麒麟·deb·统信uos
007张三丰7 小时前
软件测试专栏(11/20):测试框架开发:pytest深度解析与插件体系
运维·服务器·自动化测试·pytest·测试框架
serve the people7 小时前
Elasticsearch(1) could you tell me how to use es if i am a beginner
大数据·elasticsearch·jenkins
weixin_604236678 小时前
华三 路由器 极简核心配置
运维·服务器·网络·h3c·h3c路由器
鹤落晴春8 小时前
【Linux复习】管理SELinux安全性
linux·运维·服务器
yz_aiks8 小时前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
AI智图坊9 小时前
多件装组合SKU图的批量生产效率分析:从PS手工到AI自动化的工作流改造
大数据·运维·人工智能·gpt·ai作画·自动化·aigc
bjzhang7510 小时前
CentOS下安装MySQL详解
linux·mysql·centos
Jason_chen12 小时前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux