
# CCE Autopilot集群部署Jenkins方案概述
Jenkins是一个开源的自动化服务器，广泛应用于持续集成（CI）和持续交付/部署（CD）。当您的代码库发生变更时，Jenkins可以帮助您自动构建、测试和部署应用程序，提高开发效率和产品质量。Jenkins可以在多种环境中进行部署，不同部署环境具有不同的优势，具体请参见[表1]。此外，Jenkins部署方案有两种：单节点部署和分布式部署。
- **单节点部署**：Jenkins作为独立的实例运行，所有的构建和操作都在同一节点（Jenkins Master）上，即Jenkins Master既负责任务调度和系统管理，又负责执行具体的构建任务。所有任务都在同一节点上运行，容易导致系统资源的过度消耗，并且随着项目规模和构建任务的增多，单节点部署可能成为性能瓶颈。该部署方式主要适用于小型团队或个人开发环境。
- **分布式部署**：Jenkins Master负责任务调度和系统管理，而Jenkins Agent负责执行具体的构建任务。Jenkins Master接受来自用户的构建请求，并将这些任务分发给可用的Jenkins Agent完成。每个Jenkins Agent可以独立配置，支持不同的操作系统和构建工具，从而提供灵活的构建环境和可扩展性。同时，管理与执行分开可以有效地提升系统性能和响应速度。该架构适用于大规模的生产环境，特别是当构建任务量较大或对并发构建有较高需求时。
本文以分布式部署为例，介绍如何在CCE Autopilot集群中部署并使用Jenkins。
 表1Jenkins部署环境对比 
| 维度    | CCE Autopilot集群       | CCE Standard/Turbo集群  | 虚拟机                     | 物理机                            |
|:---|:---|:---|:---|:---|
| 适用场景  | 自动化管理需求高、持续集成和持续交付的场景 | 大规模分布式环境、持续集成和持续交付的场景 | 中小型项目、多个团队或项目共享一台物理机的场景 | 对性能和硬件要求高，且资源需求相对稳定，不需要频繁扩展的场景 |
| 性能    | 较高                    | 较高                    | 较低                      | 高                              |
| 资源利用率 | 高                     | 较高                    | 较低                      | 低                              |
| 运维管理  | 简单                    | 较简单                   | 较复杂                     | 复杂                             |
| 可伸缩性  | 强，秒级弹性伸缩              | 较强，分钟级弹性伸缩            | 较差                      | 差                              |
| 可用性   | 高                     | 高                     | 较高                      | 较低                             |
| 隔离级别  | 较高                    | 较低                    | 较高                      | 高                              |
   
#### 注意事项
Jenkins系统的维护由开发者自行负责，使用过程中CCE服务不对Jenkins系统提供额外维护与支持。
#### Jenkins的基本概念
- Master节点（Jenkins Master）：是Jenkins系统的核心部分，负责管理和协调所有工作。可以将其理解为"管理者"，不直接执行构建任务，而是分配任务给其他"工人"（即Agent节点）。
  ![](https://support.huaweicloud.com/bestpractice-cce-autopilot/public_sys-resources/note_3.0-zh-cn.png)
  Master节点提供Web界面供用户操作和查看任务进度，后续步骤中提到的Jenkins界面都是指Master节点的Web界面。
  
- Agent节点（Jenkins Agent）：是Jenkins负责执行实际构建任务的Pod或机器，执行的是具体的工作任务。可以同时设置多个Agent节点，分担工作负载，提高任务的并行度和效率。

- 插件（Plugin）：是扩展Jenkins功能的核心方式。Jenkins可以根据需求安装不同的插件来支持版本控制、构建工具和部署等功能。同时，插件可以帮助Jenkins集成不同的工具和技术，如Kubernetes、Git和Maven等。其中，Kubernetes插件是实现Jenkins与集群之间信息交互的关键。
- 流水线（Pipeline)：是一个自动化的工作流程，把软件开发过程中的多个阶段（如构建、测试和部署等）串联在一起，确保每一个步骤都能按照一定的顺序和规则自动执行。通过Pipeline，您可以向Jenkins Master下发任务，并通过Pipeline脚本定义整个自动化流程，Jenkins Master根据脚本执行任务。
- 云（Cloud）：用于配置各种云环境，如集群、容器和虚拟机等，可以灵活地使用外部云平台的计算资源，实现Jenkins Agent的动态管理。
  图1基本概念的逻辑关系   
  ![](https://support.huaweicloud.com/bestpractice-cce-autopilot/zh-cn_image_0000002134726013.png "点击放大") 
 
#### 方案架构
本示例的操作步骤请参见[图2]和[表2]。
图2操作流程图   
![](https://support.huaweicloud.com/bestpractice-cce-autopilot/zh-cn_image_0000002118334898.png "点击放大")
 表2操作步骤 
| 步骤                                                                                                                         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 关联镜像                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|
| [在CCE Autopilot集群中部署Jenkins Master](https://support.huaweicloud.com/bestpractice-cce-autopilot/cce_bestpractice_1005.html) | - 在CCE Autopilot集群中安装部署Jenkins Master，负责管理任务。  - 浏览器通过负载均衡公网IP访问Jenkins Master。                                                                                                                                                                          | Jenkins Master工作负载：本示例中使用jenkins/jenkins:lts镜像。 说明： jenkins/jenkins:lts表示Jenkins LTS版本的Docker镜像。LTS版本是Jenkins官方提供的长期支持的版本镜像，相对稳定，并且会在更长时间内接受安全更新和bug修复，通常适用于需要稳定环境的生产系统，更多信息请参见[LTS Release Line](https://www.jenkins.io/download/lts/)。                                                                                                                                                                                                                                       |
| [在Jenkins界面中配置Jenkins Agent](https://support.huaweicloud.com/bestpractice-cce-autopilot/cce_bestpractice_1006.html)        | - 在Jenkins界面安装Kubernetes的插件。  - 在Cloud中配置集群信息，用于连接集群。  - 在Cloud中配置Pod Template，作为后续在集群中动态创建Agent Pod的模板。                                                             | Jenkins Agent工作负载需要使用3个镜像： - jenkins/inbound-agent:latest：用于连接Jenkins Agent和Jenkins Master，保证任务的连续执行。  - maven:3.8.1-jdk-8：用于执行Pipeline中的打包任务。  - gcr.io/kaniko-project/executor:v1.23.2-debug：用于在容器内构建和推送Docker镜像。   |
| [在Jenkins界面中构建并执行Pipeline](https://support.huaweicloud.com/bestpractice-cce-autopilot/cce_bestpractice_1007.html)          | - 在Jenkins界面编写Pipeline脚本，定义整个任务的自动化流程，并将任务编译成Jenkins Master能够理解的语言。  - Jenkins Master负责协调整个流水线的执行过程，通过Kubernetes插件在集群中动态创建Jenkins Agent（Pod形式呈现），并将任务分发给Jenkins Agent处理。任务完成后，Jenkins Agent自动销毁。   在本示例中，Pipeline的任务内容是从代码仓中拉取代码，将代码打包成镜像，并推送到SWR镜像仓库中。 | 推送至SWR的镜像：tomcat。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   
