
# 在CCE中安装部署Jenkins方案概述
#### Jenkins是什么
Jenkins是一个开源的、提供友好操作界面的持续集成（CI）工具，起源于Hudson，主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。
Jenkins用Java语言编写，可在Tomcat等流行的servlet容器中运行，也可独立运行。通常与版本管理工具（SCM）、构建工具结合使用。Jenkins可以很好地支持各种语言的项目构建，也完全兼容Maven、Ant、Gradle等多种第三方构建工具，同时跟SVN、GIT等常用的版本控制工具无缝集成，也支持直接对接GitHub等源代码托管网站。
#### 约束与限制
- 该实践方案仅支持在CCE集群下部署，不适用专属云场景。
- Jenkins系统的维护由开发者自行负责，使用过程中CCE服务不对Jenkins系统提供额外维护与支持。
 
#### 方案架构
Jenkins部署分为以下两种模式：
- 一种是直接使用单Master安装Jenkins，直接进行任务管理和业务构建发布，但可能存在一定的生产安全风险。
- 一种是Master加Agent模式。Master节点主要是处理调度构建作业，把构建分发到Agent实际执行，监视Agent的状态。业务构建发布的工作交给Agent进行，即执行Master分配的任务，并返回任务的进度和结果。
Jenkins的Master和Agent均可安装在虚拟机或容器中，且组合形式可多样，参见[表1]。
 表1Jenkins部署模式 
| 部署模式         | Master    | Agent     | 优缺点分析                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| 单Master      | 虚拟机       | -         | - 优点：本地化构建，操作简单。  - 缺点：任务管理和执行都在同一台虚拟机上，安全风险较高。                                                                       |
| 单Master      | 容器        | -         | - 优点：利用K8s容器调度机制，拥有一定的自愈能力。  - 缺点：任务管理和执行没有分离，安全风险问题仍未解决。                                                             |
| Master加Agent | 虚拟机       | 虚拟机       | - 优点：任务管理和执行分离，降低了一定的安全风险。  - 缺点：只能固定Agent，无法进行资源调度，资源利用率低，且环境维护成本高。                                                                  |
| Master加Agent | 虚拟机       | 容器（K8s集群） | - 优点：容器化的Agent可以选择固定Agent，也可以通过K8s实现动态Agent，动态Agent的方式资源利用率高。并且可以根据调度策略均匀分配任务，后期也比较容易维护。  - 缺点：Jenkins的Master存在小概率的宕机风险，恢复成本较高。   |
| Master加Agent | 容器（K8s集群） | 容器（K8s集群） | - 优点：容器化的Agent可以选择固定Agent，也可以通过K8s实现动态Agent，资源利用率高。且Master具有自愈能力，维护成本低。Agent可以选择和Master共集群，也可以分集群。  - 缺点：系统复杂程度高，环境搭建较困难。     |
   
本文采用Master加Agent模式，Master和Agent均为容器化安装的方案，并使用在K8s集群实现动态Agent，具体架构如[图1]所示。
- Jenkins Master负责管理任务（Job），为了能够利用Kubernetes平台上的资源，需要在Master上安装Kubernetes的插件。
- Kubernetes平台负责产生Pod，用作Jenkins Agent执行Job任务。当Jenkins Master上有Job被调度时，Jenkins Master通过Kubernetes插件向Kubernetes平台发起请求，请Kubernetes根据Pod模板产生对应的Pod对象，Pod对象会向Jenkins Master发起请求，Master连接成功后，就可以在Pod上面执行Job了。
图1K8s安装Jenkins架构   
![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001348013634.png "点击放大")
#### 操作流程
1. [Jenkins Master安装部署](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0067.html)。
   
   Jenkins Master使用容器化镜像部署在CCE集群中。
   
   
2. [Jenkins Agent配置](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0068.html)。
   
   Jenkins可以在集群中创建固定Agent，也可以使用pipeline与CCE的对接，动态提供Agent Pod。其中动态Agent还需要使用Kubernetes相关插件配置集群认证信息及用户权限。
   
   
3. [使用Jenkins构建流水线](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0069.html)。
   
   Jenkins流水线与SWR对接，在Agent中调用docker build/login/push相关的命令，实现自动化的镜像打包、推送。
   您也可以通过流水线实现Kubernetes资源（deployment/service/ingress/job等）的部署、升级等能力。
   
   
 
