Jenkins支持基于kubernetes动态创建代理,使代理程序能够运行在Pod中,这种方法可以根据构建任务的变化动态的增减代理,充分利用kubernetes的特性,为分布式构建提供灵活的运行环境
- 如下图所示
当项目触发构建时,Jenkins会调用kubernetes api创建一个专用的pod作为从节点,在该pod执行一系列构建任务。一旦完成构建流程,该pod就会自动销毁,实现资源的高效利用。具体使用步骤如下:
1、kubernetes插件配置
基于kubernetes动态创建代理功能由kubernetes插件提供,使用之前需要在Jenkins插件管理中安装它
安装完成后,添加kubernetes云:Manage Jenkins》Nodes and Clouds》Clouds》Add a new cloud》kubernetes,配置如下
- kubernetes地址:指定kubernetes API地址和端口(通常是Master节点IP地址和6443端口),并使用https协议
- 凭据:选择访问kubernetes APi的凭据。单机Add按钮添加凭据,选择Jenkins,填写以下字段
- Kind:指定类型,这里选择 Secret file
- File:选择文件。这里上传kubectl使用的kubeconfig认证文件。为了提高安全性,该kubeconfig认证文件仅需授予管理pod资源的权限
- Description:凭据描述。这里输入Jenkins-agent-kubeconfig
单击Add按钮添加凭据,然后选择该凭据。可以单击右下方连接测试按钮验证访问kubernetes API是否成功
- Jenkins地址:指定Jenkins访问地址,这里输入http://172.16.99.82:8080/。
最后点击save保存配置
2、 创建Pipeline类型项目
Pipeline项目类型是由Pipeline插件提供,在使用之前,需要在插件管理中安装它
创建一个名为web-pipeline-demo的项目,并选择Pipeline项目类型,单击ok按钮进行创建并进入项目配置页面,在Pipeline部分定义script脚本,如下图所示
- Pipeline 脚本内容如下
pipeline {agent {kubernetes {yaml '''apiVersion: v1kind: Podmetadata:labels:app: jenkins-slavespec:containers:- name: jnlpimage: uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']'''}}stages {stage('Build') {steps {echo 'Build...'}}stage('Test') {steps {echo 'Test...'}}stage('Deploy') {steps {echo 'Deploy...'}}}
}
在上述脚本中,agent部分使用了kubernetes指令,表示基于kubernetes动态创建代理,其中yaml块用于定义pod资源配置,包含一个使用uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21镜像创建的容器,并通过参数和引用变量(JENKINS_SECRET和JENKINS_NAME)将连接Jenkins所需的认证秘钥和代理名称传递给代理程序。但这两个环境变量在Pod中并未被定义,实际上,Jenkins在将Pod配置发送到kubernetes API之前,会自动将以下环境变量添加到容器中
- JENKINS_URL:Jenkins访问地址
- JENKINS_SECRET:连接Jenkins的认证秘钥
- JENKINS_NAME:代理名称
接着,定义三个阶段,每个阶段中有一个步骤,输出一个字符串
3、验证与测试
执行一次构建以验证Jenkins Pipeline和基于kubernetes动态创建代理功能
项目触发构建后,Jenkins会调用kubernetes API创建一个代理Pod,如下所示
- Pod名称由项目名称和构建编号等信息组成。一旦构建流程完成,该Pod就会自动销毁。同时,在项目中可以实时查看每个阶段的执行结果和耗时。阶段视图(该功能需要安装Pipeline: Stage View插件)如下图所示