文档首页/ 容器镜像服务 SWR/ 最佳实践(基础版)/ 使用 Jenkins 实现镜像的 CI/CD
更新时间:2026-09-22 GMT+08:00
分享

使用 Jenkins 实现镜像的 CI/CD

操作场景

在云原生应用持续交付过程中,您需要将代码提交后自动构建为容器镜像,推送到镜像仓库后自动部署到容器集群。Jenkins 作为主流的 CI/CD 工具,可以串联从源码构建到镜像推送再到集群部署的全流程。

容器镜像服务(SWR)提供镜像存储能力,与 Jenkins 结合可以实现完整的 CI/CD 流水线。

通过本章节的操作,您可以实现使用 Jenkins Pipeline 自动拉取源码、构建 Docker 镜像并推送到 SWR。

约束与限制

  • Jenkins 需安装 Docker 插件,且 Jenkins agent 节点上需安装 Docker 运行环境。
  • 在 Jenkins 中直接控制部署时机,可使用 kubectl 或 CCE API 直接部署。

前提条件

表1 前提条件

前提条件

确认方法

参考文档

已创建组织

在SWR控制台,确认组织已存在

创建组织

已获取SWR登录指令

在SWR控制台"总览"页面,单击"登录指令"可复制

获取长期有效的登录或推拉镜像指令。

已创建CCE集群,且Jenkins节点可访问集群API Server

在CCE控制台确认集群状态为"运行中",并在Jenkins节点执行kubectl cluster-info验证连通性

购买CCE集群

已安装Jenkins(2.300及以上版本)

访问Jenkins页面,在"系统管理 > 系统信息"中查看版本号

Jenkins Master安装部署

已安装Jenkins插件

在"系统管理 > 插件管理"中确认以下插件已安装:

  • Docker Pipeline plugin
  • Git plugin
  • kubectl(可选,用于直接部署)

Jenkins插件管理

已配置代码仓库Webhook

在GitLab/GitHub仓库设置中,确认Webhook已配置,推送到指定分支时可触发Jenkins构建

GitLab:Webhook官方文档

GitHub:Webhook官方文档

操作步骤

  1. 准备Jenkins环境

    1. 安装并配置Jenkins Master,详细操作请参见Jenkins Master安装部署。
    2. 配置Jenkins Agent,确保Agent节点具备Docker构建能力,详细操作请参见Jenkins Agent配置。
    3. 在Jenkins中添加SWR凭据。
      1. 在Jenkins页面,选择"系统管理 > Manage Credentials > Jenkins"。
      2. 单击"Global"域,然后单击"Add Credentials"。
      3. 配置以下参数:
        表2 参数说明

        参数

        说明

        Kind

        选择"Username with password"

        Username

        SWR登录用户名,格式为{区域名}@{账号名}

        Password

        SWR登录密码

        ID

        凭据标识(用户自定义),如swr-credentials,后续Pipeline中引用

        SWR登录用户名和SWR登录密码获取方式参见获取长期有效的登录或推拉镜像指令。

      4. 单击"Create"保存凭据。
    4. 添加 Git 仓库凭据

      如果代码仓库为私有仓库,需按相同方式添加 Git 凭据,ID 设置为 git-credentials,与后续 Pipeline 中的 credentialsId 保持一致。

    5. 添加kubeconfig文件
      1. 从集群导出 kubeconfig 文件,参考配置文件下载。
      2. 存入 Jenkins 凭据

        在Jenkins页面,选择"系统管理 > Manage Credentials > Jenkins"。

        单击"Global"域,然后单击"Add Credentials"。

        配置以下参数:
        表3 参数说明

        参数

        说明

        Kind

        选择"Secret file"

        File

        上传 kubeconfig-prod 文件

        ID

        凭据标识(用户自定义),如kubeconfig-prod,后续Pipeline中引用

  2. 创建Jenkins Pipeline

    1. 在Jenkins页面,单击"New Item"。
    2. 输入任务名称(如swr-cicd-pipeline),选择"Pipeline",单击"OK"。
    3. 在"Pipeline"配置区域,选择"Pipeline script",粘贴以下Jenkinsfile脚本。

      请根据实际环境替换脚本中的占位符(如<SWR地址>、<命名空间>等)。

      pipeline {
          agent any
      
          environment {
              SWR_REGISTRY  = '<SWR地址>'                  // 如:swr.cn-north-4.myhuaweicloud.com
              IMAGE_NAME    = '<命名空间>/<镜像名称>'       // 如:my-namespace/my-app
              IMAGE_TAG     = "${env.BUILD_NUMBER}"        // 使用 Jenkins 构建号作为镜像版本
              DOCKERFILE_PATH = '-f docker/Dockerfile .'   // Dockerfile 路径,可根据实际修改
          }
      
          stages {
              stage('Clone') {
                  steps {
                      checkout([
                          $class: 'GitSCM',
                          branches: [[name: env.GIT_BRANCH ?: 'main']],
                          userRemoteConfigs: [[
                              url: '<代码仓库地址>',
                              credentialsId: 'git-credentials'
                          ]]
                      ])
                  }
              }
      
              stage('Build Docker Image') {
                  steps {
                      script {
                          docker.withRegistry("https://${SWR_REGISTRY}", 'swr-credentials') {
                              def app = docker.build(
                                  "${SWR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}",
                                  "${DOCKERFILE_PATH}"
                              )
                          }
                      }
                  }
              }
      
              stage('Push to SWR') {
                  steps {
                      script {
                          docker.withRegistry("https://${SWR_REGISTRY}", 'swr-credentials') {
                              docker.image("${SWR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}").push()
                          }
                      }
                  }
              }
              
              
              stage('Deploy to Prod') {
                  
      
                  steps {
                      input message: '确认部署到生产环境?', ok: '确认部署'
                      withCredentials([file(credentialsId: 'kubeconfig-prod', variable: 'KUBECONFIG')]) {
                          sh """
                              kubectl set image deployment/<工作负载名称> \
                                  <容器名称>=${SWR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} \
                                  -n <生产命名空间>
                              kubectl rollout status deployment/<工作负载名称> -n <生产命名空间>
                          """
                      }
                  }
              }
          }
      
          post {
              success {
                  echo "Pipeline 执行成功!镜像 ${IMAGE_NAME}:${IMAGE_TAG} 已推送并部署。"
              }
              failure {
                  echo "Pipeline 执行失败,请检查构建日志。"
              }
          }
      }
    4. 单击"Save"保存Pipeline配置。

验证结果

  1. 向代码仓库的main或develop分支推送代码,触发Jenkins构建。
  2. 在Jenkins页面查看构建日志,确认各阶段执行成功:
    表4 阶段结果

    阶段

    预期结果

    Clone

    代码拉取成功

    Build Docker Image

    镜像构建成功

    Push to SWR

    镜像推送成功

    Deploy to Prod

    部署成功

  3. 登录SWR控制台,确认新镜像版本已上传。
  4. 登录CCE控制台,确认工作负载已更新为最新镜像版本。

相关文档