使用 Jenkins、Kubernetes 和 ArgoCD 搭建 CI/CD 流水线的详解

举报
汪子熙 发表于 2025/09/05 13:36:17 2025/09/05
【摘要】 现代软件开发中,持续集成和持续部署(CI/CD)已经成为团队快速迭代、稳定交付产品的重要方式。在容器编排领域,Kubernetes(k8s)凭借强大的调度和自动化能力,成为构建 CI/CD 流水线的理想平台。而 Jenkins 与 ArgoCD 则是两个强大的工具,前者擅长自动化构建与测试,后者在 Kubernetes 环境中的应用部署中表现优异。目前使用这些工具的组合,已经成为国内外互联网...

现代软件开发中,持续集成和持续部署(CI/CD)已经成为团队快速迭代、稳定交付产品的重要方式。在容器编排领域,Kubernetes(k8s)凭借强大的调度和自动化能力,成为构建 CI/CD 流水线的理想平台。

而 Jenkins 与 ArgoCD 则是两个强大的工具,前者擅长自动化构建与测试,后者在 Kubernetes 环境中的应用部署中表现优异。

目前使用这些工具的组合,已经成为国内外互联网大厂搭建 CI/CD 的最佳实践之一了。

Jenkins、Kubernetes 与 ArgoCD 简介

Jenkins 是一个开源的自动化服务器,可以帮助团队实现自动化构建、测试以及部署的任务。Jenkins 有丰富的插件生态和社区支持,是构建流水线的核心工具之一。

Kubernetes 则是一个容器编排平台,帮助开发者管理容器化的应用程序,实现其自动化部署、伸缩和管理。它使得应用在不同环境中具有一致的行为,从而减小部署和运行的差异。

ArgoCD 则是一个声明式的、面向 Kubernetes 的持续部署工具。它的强大之处在于与 GitOps 模式紧密结合,通过 Git 仓库作为应用部署的唯一可信来源,实现应用在 Kubernetes 集群中的自动化管理。

CI/CD 流水线的整体架构概述

CI/CD 流水线由几个主要步骤组成:代码提交、构建、测试、部署。对于 Jenkins、Kubernetes、ArgoCD 的组合,整体架构大致如下:

  1. 开发者提交代码到代码仓库(如 GitHub 或 GitLab)。
  2. Jenkins 监控代码变动,并在检测到新的提交时触发构建。
  3. Jenkins 使用 Docker 构建容器镜像,然后将镜像推送到容器镜像仓库(如 Docker Hub 或私有仓库)。
  4. ArgoCD 负责监控 Git 仓库,检测到部署配置文件变动后,自动同步变更到 Kubernetes 集群,执行应用部署。

接下来我们将逐步详细说明如何实现这一流程。

Jenkins 的安装与配置

在 Kubernetes 中部署 Jenkins 是实现自动化构建的第一步。Jenkins 可以部署为 Kubernetes 中的一个 Pod,通过使用 Helm Chart 这种 Kubernetes 常见的应用管理工具,可以更加方便地安装和管理 Jenkins。

使用 Helm 安装 Jenkins

通过 Helm Chart 安装 Jenkins 是最便捷的方式之一。首先,需要确保 Helm 在 Kubernetes 集群中已经安装并初始化。然后,可以运行以下命令来部署 Jenkins:

helm repo add jenkinsci https://charts.jenkins.io
helm repo update
helm install jenkins jenkinsci/jenkins --namespace jenkins --create-namespace

此命令会在 jenkins 命名空间中安装 Jenkins。安装完成后,可以使用 kubectl get pods -n jenkins 来查看 Jenkins Pod 的状态,确保它成功运行。

Jenkins 通过 Web UI 来进行管理,可以使用以下命令获取管理员初始密码,用于第一次登录:

kubectl exec --namespace jenkins -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/chart-admin-password && echo

配置 Jenkins 的必要插件

为了实现 CI/CD 流程,Jenkins 需要安装一些特定插件,例如 Git 插件、Pipeline 插件以及 Kubernetes 插件等。

  • Git 插件:用于监控代码仓库的变动,触发构建任务。
  • Pipeline 插件:用于编写和运行 Jenkins 流水线,支持将构建步骤写入 Jenkinsfile 文件。
  • Kubernetes 插件:用于与 Kubernetes 集成,使 Jenkins 可以动态分配 Kubernetes Pod 作为构建 Agent,实现弹性构建。

可以通过 Jenkins 的 Web UI,在 Manage Jenkins -> Manage Plugins 中安装这些插件。

编写 Jenkinsfile 文件实现构建流程

Jenkinsfile 是 Jenkins 中用来描述流水线过程的脚本文件,它定义了从代码拉取、构建到测试的全部过程。在本例中,我们将编写一个 Jenkinsfile 文件,用于完成以下步骤:

  1. 拉取代码
  2. 构建 Docker 镜像
  3. 推送 Docker 镜像到镜像仓库
  4. 通知 ArgoCD 更新配置文件

以下是一个示例 Jenkinsfile 文件的内容:

pipeline {
    agent any
    environment {
        REGISTRY = 'your-docker-registry'
        IMAGE_NAME = 'your-image-name'
        IMAGE_TAG = "${env.BUILD_NUMBER}"
    }
    stages {
        stage('Clone Repository') {
            steps {
                checkout scm
            }
        }
        stage('Build Docker Image') {
            steps {
                script {
                    dockerImage = docker.build("${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}")
                }
            }
        }
        stage('Push Docker Image') {
            steps {
                script {
                    docker.withRegistry('https://your-docker-registry', 'docker-credentials-id') {
                        dockerImage.push()
                    }
                }
            }
        }
        stage('Update Deployment Config') {
            steps {
                sh 'git clone https://your-git-repo-url.git'
                dir('your-git-repo') {
                    sh "sed -i 's/tag:.*/tag: ${IMAGE_TAG}/' deployment.yaml"
                    sh 'git commit -am "Update deployment image tag"'
                    sh 'git push'
                }
            }
        }
    }
}

这个 Jenkinsfile 文件描述了完整的构建流程,从拉取代码仓库,到构建 Docker 镜像,再到推送镜像,最后更新部署配置文件。

配置 ArgoCD 实现持续部署

ArgoCD 是一个 Kubernetes 的声明式 GitOps 工具,用于实现持续部署。通过 ArgoCD,我们可以使 Kubernetes 集群与 Git 仓库中的声明式配置保持一致。安装 ArgoCD 并配置为监控部署配置文件的变更,是实现持续部署的关键步骤。

安装 ArgoCD

首先,可以使用以下命令在 Kubernetes 集群中安装 ArgoCD:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

安装完成后,可以使用 kubectl port-forward 命令访问 ArgoCD 的 UI 界面:

kubectl port-forward svc/argocd-server -n argocd 8080:443

然后,访问浏览器中的 https://localhost:8080,即可登录到 ArgoCD 的 Web 界面。使用默认管理员账户 admin 以及通过以下命令获取的初始密码进行登录:

kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o jsonpath="{.items[0].metadata.name}"

配置 ArgoCD 与 Git 仓库的集成

为了实现 GitOps,我们需要将 ArgoCD 与 Git 仓库集成。登录 ArgoCD Web 界面后,可以创建一个新的应用程序,用于监控 Git 仓库中的 Kubernetes 部署配置文件。

以下是一个简单的配置步骤:

  • 在 ArgoCD Web UI 中点击 New App 按钮。
  • 填写应用程序的基本信息,如 Application NameProject
  • Repository URL 中填入部署配置文件所在的 Git 仓库 URL。
  • 指定 Kubernetes 集群的 API Server 地址,以及应用部署的命名空间。

配置完成后,ArgoCD 会持续监控 Git 仓库中的配置文件变动,并将变动自动同步到 Kubernetes 集群中,实现自动化的应用部署。

持续集成与持续部署的结合:一个实例分析

为了更好地理解 Jenkins、Kubernetes 和 ArgoCD 的组合是如何协同工作的,我们可以来看一个实际的案例。

设想有一个开发团队,他们负责维护一款电商网站。每次开发者向主分支提交新代码后,Jenkins 会自动拉取代码,并进行构建和单元测试。如果测试通过,Jenkins 会将新版本的 Docker 镜像推送到镜像仓库。

在 Jenkins 中,构建过程结束后,构建脚本会自动修改存储在 Git 仓库中的 Kubernetes 部署配置文件,将容器镜像的标签更新为新的版本号。由于 ArgoCD 正在监控这个 Git 仓库,配置文件一旦变更,ArgoCD 会立即检测到,并自动更新 Kubernetes 集群中的应用。

这种工作流程实现了真正的持续集成与持续部署:开发人员只需提交代码,其余的步骤均由流水线自动完成。这不仅提高了开发的效率,同时也减少了人为操作可能带来的风险。

实现过程中的最佳实践与注意事项

在使用 Jenkins、Kubernetes 和 ArgoCD 搭建 CI/CD 流水线时,有一些最佳实践和注意事项需要遵循,以确保流程的高效与安全性。

Jenkins 安全配置

由于 Jenkins 通常会直接与代码仓库、镜像仓库等敏感资源交互,建议对 Jenkins 的访问进行严格的权限控制。可以启用基于角色的访问控制(Role-Based Access Control),并为不同的用户分配不同的权限,确保敏感操作只有被授权的用户可以执行。

镜像管理

在构建 Docker 镜像时,建议对基础镜像的选择和使用进行谨慎管理。可以使用经过信任的基础镜像,并定期更新镜像,确保其包含最新的安全补丁。此外,推送到 Docker 仓库的镜像应包含唯一的标签,例如使用构建号作为标签,防止因标签覆盖导致的问题。

GitOps 模式下的版本控制

在 GitOps 模式下,Git 仓库作为唯一可信的配置来源,所有变动都应通过 Git 进行追踪。这意味着每次部署的变更都应创建一个新的提交,以确保所有部署历史都可以回溯。通过这种方式,可以实现应用版本的回滚与配置变更的审计。

ArgoCD 与 Jenkins 的集成

Jenkins 和 ArgoCD 的集成可以通过修改 Git 仓库中的配置文件来实现,但在实际项目中,可以使用 Webhook 或 API 调用来增强灵活性。例如,可以在 Jenkins 中配置一个步骤,构建结束后通过调用 ArgoCD 的 API 来触发同步操作,以实现更精细的控制。

省流版

通过 Jenkins、Kubernetes 和 ArgoCD 的结合,构建了一个完整的 CI/CD 流水线,实现了从代码提交到应用部署的全自动化流程。这种流水线的优势在于其高效、可重复性以及自动化管理能力,适用于大多数现代软件开发项目。

Jenkins 负责自动化构建与测试,确保每个版本的代码质量;Kubernetes 提供强大的容器编排和管理能力,使得应用在不同环境中具有一致的行为;而 ArgoCD 则利用 GitOps 模式,实现了应用的声明式部署与持续交付。

未来,随着 DevOps 工具链的不断发展,可能会有更多的工具和技术加入到 CI/CD 的生态中来。例如,结合服务网格(Service Mesh)可以实现更加精细的流量管理,或者引入自动化安全扫描工具以进一步提高系统的安全性。而这一切的目标,都是为了让软件开发的过程更加高效、更加安全、更加智能化。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。