Jenkins Agent配置
安装完Jenkins后,可能会出现以下提示,说明Jenkins使用Master进行本地构建,未配置Agent。
如果您选择单Master安装Jenkins,执行完毕Jenkins Master安装部署中的操作后已完成,可直接进行流水线构建,请参见使用Jenkins构建流水线。
如果您选择Master+Agent模式的Jenkins,请继续完成Agent的配置,您可根据自身需求选择其中一种方案执行:
- 固定Agent:Agent容器一直运行,任务构建完成后不会销毁,创建完成后将一直占用集群资源,配置过程较简单。
- 动态Agent:构建任务时动态创建Agent容器,并在任务构建完成后销毁容器,可实现资源动态分配,资源利用率高,但是配置过程较为复杂。
本文使用容器化安装Agent,示例的Agent镜像为jenkins/inbound-agent:4.13.3-1。
Jenkins添加固定Agent
- 登录Jenkins Dashboard,单击左侧“Manage Jenkins”,选择“System Configuration > Manage nodes and clouds”。
- 单击新页面左侧的“New Node”,输入节点名称为fixed-agent(该名称可自定义),类型选择固定节点。
- 配置以下节点信息:
- Number of executors(并发构建的最大数目):默认为1,可根据实际需求填写。
- Remote root directory(远程工作目录):/home/jenkins/agent
- Launch method(启动方式):选择“Launch agent by connecting it to the controller(通过Java Web启动代理)”。
其余参数可保持默认,无需填写,并单击“保存”。
- 在“节点列表”中单击新增的节点名称,可看到Agent状态未连接,并提供了节点连接Jenkins的方式。该命令适用于虚拟机安装,而本示例为容器化安装,因此仅需复制其中的secret,如下图所示。
- 前往CCE控制台,单击左侧栏目树中的“工作负载 > 无状态负载”,单击右侧“创建负载”按钮进入无状态工作负载创建页面。
- 填写工作负载基本参数。
- 负载名称:agent(可自定义)。
- 命名空间:选择Jenkins部署的命名空间,可自行创建。
- 实例数量:1个。
- 填写容器基本信息参数。
- 镜像名称:jenkins/inbound-agent:4.13.3-1。此处镜像版本可能随时间变化发生变动,请根据实际情况进行选择,或拉取latest版本。
- CPU配额:本例中CPU配额限制为2 Core
- 内存配额:本例中内存配额限制为2048 MiB
- 特权容器:必须要开启“特权容器”,使容器获得操作宿主机的权限,否则容器中无法执行docker命令。
其他参数默认。
- 配置环境变量:
- JENKINS_URL:Jenkins的访问路径,需要填写6中设置的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。
- 给Jenkins容器添加权限,让Jenkins容器中可以执行docker命令。
- 确认3中已开启“特权容器”开关。
- 在“数据存储”页签下,选择添加“主机路径 (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所示。 - 在“安全设置”中配置“运行用户”为:0(即root用户)。
图2 配置运行用户
- “高级配置”步骤可以保持默认,直接单击“创建工作负载”,完成工作负载创建。
- 前往Jenkins页面,刷新节点状态为“已同步”。
Agent设置完成后,建议将Master的并发构建数设置为0,即不使用Master进行本地构建,全部使用Agent进行构建,具体操作步骤请参见修改并发构建数量。
Jenkins设置动态Agent
- 安装插件。
在Jenkins Dashboard页面单击左侧“Manage Jenkins”,选择“System Configuration > Manage Plugins”,在“Available”页签中筛选安装“Kubernetes CLI”和“Kubernetes”插件。
本文安装的插件版本为,插件版本可能随时间变化发生变动,请您自行选择:
- Kubernetes Plugin:3734.v562b_b_a_627ea_c
用于在 Kubernetes 集群中运行动态Agent,为每个启动的Agent创建一个Kubernetes Pod,并在每次构建完成后停止Pod。
- Kubernetes CLI Plugin:1.10.3
允许为Job配置kubectl,从而与Kubernetes集群进行交互。
Jenkins插件由插件维护者提供,可能因为存在安全风险进行版本迭代。
- Kubernetes Plugin:3734.v562b_b_a_627ea_c
- 添加集群凭据到Jenkins。
将集群的访问凭据提前添加至Jenkins,具体操作步骤请参见设置集群访问凭证。
- 配置集群基本信息。
在Jenkins Dashboard页面单击左侧“Manage Jenkins”,选择“System Configuration > Manage nodes and clouds”,单击左侧的“Configure Clouds”配置集群,单击“Add a new cloud”,并选择Kubernetes,集群名称可自定义。
- 填写Kubernetes Cloud details。
填写以下集群配置,其余参数可保持默认,如图3所示。
- 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”
- 添加容器:单击“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用户)。
- 添加卷:单击“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所示。
- Run As User ID:0(即root用户)。
- Workspace Volume(工作空间卷):agent的工作目录,建议做持久化。选择“Host Path Workspace Volume”,主机路径填写/home/jenkins/agent。
- 配置Pod模板基本参数:参数配置如图4所示。
- 填写完成后,单击“Save”保存。
Agent设置完成后,建议将Master的并发构建数设置为0,即不使用Master进行本地构建,全部使用Agent进行构建,具体操作步骤请参见修改并发构建数量。
设置集群访问凭证
在Jenkins中能够识别的证书文件为PKCS#12 certificate,因此需要先将集群证书转换生成PKCS#12格式的pfx证书文件。
- 前往CCE控制台的“总览 > 连接信息”页面中下载集群证书,证书包含ca.crt、client.crt、client.key三个文件。
- 登录一台Linux主机,将三个证书文件放在同一目录,并通过openssl进行证书格式的转换,生成一个Client P12认证文件cert.pfx。生成证书时,会提示输入密码 ,这里密码可自定义。
openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
- 在Jenkins的“系统管理 > Manage Credentials”中,单击Jenkins默认的“全局”凭据存储域,您也可以自行新建域。
- 单击“添加凭据”,创建新的凭据。
- 类型:选择Certificate。
- 范围:全局。
- 证书:选择Upload PKCS#12 certificate,并上传2时生成的cert.pfx文件。
- 密码:转换cert.pfx时自定义设置的密码。
- ID:可以自定义,此处设置为k8s-test-cert。