更新时间:2024-05-10 GMT+08:00

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

  1. 登录Jenkins Dashboard,单击左侧“Manage Jenkins”,选择“System Configuration > Manage nodes and clouds”。
  2. 单击新页面左侧的“New Node”,输入节点名称为fixed-agent(该名称可自定义),类型选择固定节点。

  3. 配置以下节点信息:

    • Number of executors(并发构建的最大数目):默认为1,可根据实际需求填写。
    • Remote root directory(远程工作目录):/home/jenkins/agent
    • Launch method(启动方式):选择“Launch agent by connecting it to the controller(通过Java Web启动代理)”。

    其余参数可保持默认,无需填写,并单击“保存”

  4. “节点列表”中单击新增的节点名称,可看到Agent状态未连接,并提供了节点连接Jenkins的方式。该命令适用于虚拟机安装,而本示例为容器化安装,因此仅需复制其中的secret,如下图所示。

  5. 前往CCE控制台,单击左侧栏目树中的“工作负载 > 无状态负载”,单击右侧“创建负载”按钮进入无状态工作负载创建页面。
  6. 填写工作负载基本参数。

    • 负载名称:agent(可自定义)。
    • 命名空间:选择Jenkins部署的命名空间,可自行创建。
    • 实例数量:1个。

  7. 填写容器基本信息参数。

    • 镜像名称:jenkins/inbound-agent:4.13.3-1。此处镜像版本可能随时间变化发生变动,请根据实际情况进行选择,或拉取latest版本。
    • CPU配额:本例中CPU配额限制为2 Core
    • 内存配额:本例中内存配额限制为2048 MiB
    • 特权容器:必需要开启“特权容器”,使容器获得操作宿主机的权限,否则容器中无法执行docker命令。

    其他参数默认。

  8. 配置环境变量:

    • JENKINS_URL:Jenkins的访问路径,需要填写6中设置的8080端口地址(此处填写的地址必须同时开放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。

  9. 给Jenkins容器添加权限,让Jenkins容器中可以执行docker命令。

    1. 确认3中已开启“特权容器”开关。
    2. “数据存储”中的“本地存储”页签下添加本地存储,将主机路径挂载到容器对应路径。
      表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 挂载主机到容器对应路径
    3. “安全设置”中配置“运行用户”为:0(即root用户)。
      图2 配置运行用户

  10. “高级配置”步骤可以保持默认,直接单击“创建工作负载”,完成工作负载创建。
  11. 前往Jenkins页面,刷新节点状态为“已同步”。

    Agent设置完成后,建议将Master的并发构建数设置为0,即不使用Master进行本地构建,全部使用Agent进行构建,具体操作步骤请参见修改并发构建数量

Jenkins设置动态Agent

  1. 安装插件。

    在Jenkins Dashboard页面单击左侧“Manage Jenkins”,选择“System Configuration > Manage Plugins”,在“Available”页签中筛选安装“Kubernetes CLI”和“Kubernetes”插件。

    本文安装的插件版本为,插件版本可能随时间变化发生变动,请您自行选择:

    • Kubernetes Plugin3734.v562b_b_a_627ea_c

      用于在 Kubernetes 集群中运行动态Agent,为每个启动的Agent创建一个Kubernetes Pod,并在每次构建完成后停止Pod。

    • Kubernetes CLI Plugin:1.10.3

      允许为Job配置kubectl,从而与Kubernetes集群进行交互。

    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中设置的8080端口地址(此处填写的地址必须同时开放8080和50000端口,即集群内访问的IP地址),例如“http://10.247.222.254:8080”
    图3 Kubernetes Cloud details填写示例

  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”
      图4 Pod Template基本参数
    • 添加容器:单击“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用户)。
      图5 Container Template参数
    • 添加卷:单击“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 挂载主机到容器对应路径
    • Run As User ID:0(即root用户)。
    • Workspace Volume(工作空间卷):agent的工作目录,建议做持久化。选择“Host Path Workspace Volume”,主机路径填写/home/jenkins/agent。

  6. 填写完成后,单击“Save”保存。

    Agent设置完成后,建议将Master的并发构建数设置为0,即不使用Master进行本地构建,全部使用Agent进行构建,具体操作步骤请参见修改并发构建数量

设置集群访问凭证

在Jenkins中能够识别的证书文件为PKCS#12 certificate,因此需要先将集群证书转换生成PKCS#12格式的pfx证书文件。

  1. 前往CCE控制台的“集群信息 > 连接信息”页面中下载集群证书,证书包含ca.crt、client.crt、client.key三个文件。

  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默认的“全局”凭据存储域,您也可以自行新建域。

  4. 单击“添加凭据”,创建新的凭据。

    • 类型:选择Certificate。
    • 范围:全局。
    • 证书:选择Upload PKCS#12 certificate,并上传2时生成的cert.pfx文件。
    • 密码:转换cert.pfx时自定义设置的密码。
    • ID:可以自定义,此处设置为k8s-test-cert。