
# Jenkins Agent配置
安装完Jenkins后，可能会出现以下提示，说明Jenkins使用Master进行本地构建，未配置Agent。
![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001465972145.png "点击放大")
如果您选择单Master安装Jenkins，执行完毕[Jenkins Master安装部署](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0067.html)中的操作后已完成，可直接进行流水线构建，请参见[使用Jenkins构建流水线](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0069.html)。
如果您选择Master+Agent模式的Jenkins，请继续完成Agent的配置，您可根据自身需求选择其中一种方案执行：
- [固定Agent]：Agent容器一直运行，任务构建完成后不会销毁，创建完成后将一直占用集群资源，配置过程较简单。
- [动态Agent]：构建任务时动态创建Agent容器，并在任务构建完成后销毁容器，可实现资源动态分配，资源利用率高，但是配置过程较为复杂。
本文使用容器化安装Agent，示例的Agent镜像为**jenkins/inbound-agent:4.13.3-1**。
 #### Jenkins添加固定Agent
1. 登录Jenkins Dashboard，单击左侧"Manage Jenkins"，选择"System Configuration \> Manage nodes and clouds"。
2. 单击新页面左侧的"New Node"，输入节点名称为fixed-agent（该名称可自定义），类型选择固定节点。
   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001465973233.png "点击放大")
   
   
3. 配置以下节点信息：
   
   - Number of executors（并发构建的最大数目）：默认为1，可根据实际需求填写。
   
   - Remote root directory（远程工作目录）：/home/jenkins/agent
   
   - Launch method（启动方式）：选择"Launch agent by connecting it to the controller（通过Java Web启动代理）"。
   
   
   其余参数可保持默认，无需填写，并单击"保存"。
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001416537408.png "点击放大")
   
   
4. 在"节点列表"中单击新增的节点名称，可看到Agent状态未连接，并提供了节点连接Jenkins的方式。该命令适用于虚拟机安装，而本示例为容器化安装，因此仅需复制其中的secret，如下图所示。
   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001466618025.png "点击放大")
   
   
5. 前往[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击左侧栏目树中的"工作负载 \> 无状态负载"，单击右侧"创建负载"按钮进入无状态工作负载创建页面。
6. 填写工作负载基本参数。 
   - 负载名称：agent（可自定义）。
   
   - 命名空间：选择Jenkins部署的命名空间，可自行创建。
   
   - 实例数量：1个。
   
   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002017954145.png "点击放大")
   
   
   
7. 填写容器基本信息参数。 
   - 镜像名称：**jenkins/inbound-agent:4.13.3-1**。此处镜像版本可能随时间变化发生变动，请根据实际情况进行选择，或拉取latest版本。
   
   - CPU配额：本例中CPU配额限制为2 Core
   
   - 内存配额：本例中内存配额限制为2048 MiB
   
   - 特权容器：必须要开启"特权容器"，使容器获得操作宿主机的权限，否则容器中无法执行docker命令。
   
   
   其他参数默认。
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001981475402.png "点击放大")
   
   
   
8. 配置环境变量： 
   - JENKINS_URL：Jenkins的访问路径，需要填写[6](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0067.html#cce_bestpractice_0067__li46301742113619)中设置的8080端口地址**（此处填写的地址必须同时开放8080和50000端口）**，例如此案例中使用开放8080和50000端口的集群内访问地址，即"http://10.247.222.254:8080"。
   
   - JENKINS_AGENT_NAME：[2]中设置的Agent的名称，本例中为fixed-agent。
   
   - JENKINS_SECRET：[4]中复制的secret。
   
   - JENKINS_AGENT_WORKDIR：[3]中配置的远程工作目录，即/home/jenkins/agent。
   
   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002017956525.png "点击放大")
   
   
   
9. 给Jenkins容器添加权限，让Jenkins容器中可以执行docker命令。
   
   1. 确认[3]中已开启"特权容器"开关。
   
   2. 在"数据存储"页签下，选择添加"主机路径 (HostPath)"，将主机路径挂载到容器对应路径。
      表1挂载路径 
      | 存储类型           | 主机路径（HostPath）              | 挂载路径                                       |
      |:---|:---|:---|
      | 主机路径（HostPath） | **/var/run/docker.sock**    | **/var/run/docker.sock**                   |
      | 主机路径（HostPath） | **/usr/bin/docker**         | **/usr/bin/docker**                        |
      | 主机路径（HostPath） | **/usr/lib64/libltdl.so.7** | **/usr/lib/x86_64-linux-gnu/libltdl.so.7** |
      | 主机路径（HostPath） | **/usr/bin/kubectl**        | **/usr/local/bin/kubectl**                 |
         
      挂载完成后，如[图1]所示。
      图1挂载主机到容器对应路径   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002018083345.png "点击放大")
      
      
   
   3. 在"安全设置"中配置"运行用户"为：0（即root用户）。
      图2配置运行用户   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001981483830.png "点击放大")
      
      
   
   
   
   
10. "高级配置"步骤可以保持默认，直接单击"创建工作负载"，完成工作负载创建。
11. 前往Jenkins页面，刷新节点状态为"已同步"。 
    ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001416065764.png "点击放大")
    ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
    Agent设置完成后，建议将Master的并发构建数设置为0，即不使用Master进行本地构建，全部使用Agent进行构建，具体操作步骤请参见[修改并发构建数量](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0067.html#cce_bestpractice_0067__section270062718585)。
    
    
 
 #### Jenkins设置动态Agent
1. **安装插件。**
   
   在Jenkins Dashboard页面单击左侧"Manage Jenkins"，选择"System Configuration \> Manage Plugins"，在"Available"页签中筛选安装"Kubernetes CLI"和"Kubernetes"插件。
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001471430697.png "点击放大")
   本文安装的插件版本为，插件版本可能随时间变化发生变动，请您自行选择：
   - [Kubernetes Plugin](https://plugins.jenkins.io/kubernetes/)：3734.v562b_b_a_627ea_c
     用于在 Kubernetes 集群中运行动态Agent，为每个启动的Agent创建一个Kubernetes Pod，并在每次构建完成后停止Pod。
     
   
   - [Kubernetes CLI Plugin](https://plugins.jenkins.io/kubernetes-cli/)：1.10.3
     允许为Job配置kubectl，从而与Kubernetes集群进行交互。
     
   
   
   ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
   Jenkins插件由插件维护者提供，可能因为存在安全风险进行版本迭代。
   
   
2. **添加集群凭据到Jenkins。**
   
   将集群的访问凭据提前添加至Jenkins，具体操作步骤请参见[设置集群访问凭证]。
   
   
3. **配置集群基本信息。**
   
   在Jenkins Dashboard页面单击左侧"Manage Jenkins"，选择"System Configuration \> Manage nodes and clouds"，单击左侧的"Configure Clouds"配置集群，单击"Add a new cloud"，并选择**Kubernetes**，集群名称可自定义。
   
   
4. **填写Kubernetes Cloud details** 。
   
   填写以下集群配置，其余参数可保持默认，如[图3]所示。
   - Kubernetes URL：集群APIserver地址，可填写"https://kubernetes.default.svc.cluster.local:443"。
   
   - Credentials：选择[2]中添加的集群凭据，可单击"连接测试"，查看是否正常连接集群。
   
   - Jenkins URL：Jenkins的访问路径，需要填写[6](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0067.html#cce_bestpractice_0067__li46301742113619)中设置的8080端口地址**（此处填写的地址必须同时开放8080和50000端口，即集群内访问的IP地址）**，例如"http://10.247.222.254:8080"。
   
   
   图3Kubernetes Cloud details填写示例   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001349986824.png "点击放大")
   
   
5. **Pod Templates** ：单击"Add Pod Template \> Pod Template details"，填写Pod模板参数。
   
   - 配置Pod模板基本参数：参数配置如[图4]所示。
     - Name：jenkins-agent
     
     - Namespace：cicd
     
     - Labels：jenkins-agent
     
     - Usage：选择"Use this node as much as possible"
     
     
     图4Pod Template基本参数   
     ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001399744097.png "点击放大") 
   
   - 添加容器：单击"Add Container \> Container Template"，参数配置如[图5]所示。
     - Name（名称）：必须为**jnlp**。
     
     - Docker image（镜像）：**jenkins/inbound-agent:4.13.3-1**。此处镜像版本可能随时间变化发生变动，请根据实际情况进行选择，或使用latest版本。
     
     - Working directory（工作目录）：默认为/home/jenkins/agent
     
     - Command to run（运行的命令）/Arguments to pass to the command（命令参数）：需要删除已有的默认值，保持空值。
     
     - Allocate pseudo-TTY（分配伪终端）：勾选该参数。
     
     - Advanced（高级）：勾选"Run in privileged mode"，并填写"Run As User ID"为0（即root用户）。
     
     
     图5Container Template参数   
     ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001350206690.png "点击放大") 
   
   - 添加卷：单击"Add Volume \> Host Path Volume"，将[表2]中的主机路径挂载到容器对应路径。
      表2挂载路径 
     | 存储类型           | 主机路径（HostPath）              | 挂载路径                                       |
     |:---|:---|:---|
     | 主机路径（HostPath） | **/var/run/docker.sock**    | **/var/run/docker.sock**                   |
     | 主机路径（HostPath） | **/usr/bin/docker**         | **/usr/bin/docker**                        |
     | 主机路径（HostPath） | **/usr/lib64/libltdl.so.7** | **/usr/lib/x86_64-linux-gnu/libltdl.so.7** |
     | 主机路径（HostPath） | **/usr/bin/kubectl**        | **/usr/local/bin/kubectl**                 |
        
     挂载完成后，如[图6]所示。
     图6挂载主机到容器对应路径   
     ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001399673949.png "点击放大") 
   
   - Run As User ID：0（即root用户）。
   
   - Workspace Volume（工作空间卷）：agent的工作目录，建议做持久化。选择"Host Path Workspace Volume"，主机路径填写/home/jenkins/agent。 ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001416735230.png "点击放大")
     
   
   
   
   
6. 填写完成后，单击"Save"保存。 
   ![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/note_3.0-zh-cn.png)
   Agent设置完成后，建议将Master的并发构建数设置为0，即不使用Master进行本地构建，全部使用Agent进行构建，具体操作步骤请参见[修改并发构建数量](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0067.html#cce_bestpractice_0067__section270062718585)。
   
   
 
 #### 设置集群访问凭证
在Jenkins中能够识别的证书文件为PKCS#12 certificate，因此需要先将集群证书转换生成PKCS#12格式的pfx证书文件。
1. 前往CCE控制台的"概览 \> 连接信息"页面中下载集群证书，证书包含ca.crt、client.crt、client.key三个文件。 
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002017952969.png "点击放大")
   
   
2. 登录一台Linux主机，将三个证书文件放在同一目录，并通过openssl进行证书格式的转换，生成一个Client P12认证文件cert.pfx。生成证书时，会提示输入密码 ，这里密码可自定义。
   
   ```
   openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
   ```
   
   
3. 在Jenkins的"系统管理 \> Manage Credentials"中，单击Jenkins默认的"全局"凭据存储域，您也可以自行新建域。 
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001416735446.png "点击放大")
   
   
4. 单击"添加凭据"，创建新的凭据。 
   - 类型：选择Certificate。
   
   - 范围：全局。
   
   - 证书：选择Upload PKCS#12 certificate，并上传[2]时生成的cert.pfx文件。
   
   - 密码：转换cert.pfx时自定义设置的密码。
   
   - ID：可以自定义，此处设置为k8s-test-cert。
   
   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000001400577445.png "点击放大")
   
   
 
