自定义 Jenkins Agent¶
如果需要使用特定环境的 Jenkins Agent,如特殊版本的JDK,或者特定的工具,可以通过自定义 Jenkins Agent 来实现。 本文档描述了如何在 DCE 5.0 中自定义 Jenkins Agent,其中工作台支持全局范围的自定义 Agent、流水线级别的自定义 Agent,可根据实际使用场景来决定选用哪种方式。
关于如何构建自定义的镜像请参考文档在 Jenkins 中使用自定义工具链
自定义全局范围 Agent¶
当前环境中有很多流水线对某个特定的工具均有需求时,则可以在全局范围定义 Agent 以供所有流水线可以使用
配置 Jenkins¶
- 前往 容器管理 -> 集群列表 ,选择您安装 Jenkins 的集群和命名空间 (默认集群名称为 kpanda-global-cluster,命名空间为 amamba-system)
- 选择 配置与密钥 -> 配置项 ,选择 Jenkins 安装的命名空间,搜索配置项
global-jenkins-casc-config
-
选择 编辑 YAML , 搜索
jenkins.clouds.kubernetes.templates
,添加以下内容(以添加 maven-jdk11 为例)- name: "maven-jdk11" # (1)! label: "maven-jdk11" # (2)! inheritFrom: "maven" # (3)! containers: - name: "maven" # (4)! image: "my-maven-image" # (5)!
- 自定义 Jenkins Agent 的名称
- 自定义 Jenkins Agent 的标签。若要指定多个标签,请用空格来分隔标签
- 该自定义 Jenkins Agent 所继承的现有容器组模板的名称
- 该自定义 Jenkins Agent 所继承的现有容器组模板中指定的容器名称,如果不同名则按照原来模版新增一个容器
- 使用自定义的镜像
Note
您也可以在 containers 中添加其他与 podTemplate 相关的配置项,Jenkins 采用 yaml merge 的方式,未填字段则继承自父模板。
-
保存配置项,等待约一分钟后,Jenkins 会自动重新加载配置,也可以选择重启 Jenkins 实例快速加载。
使用¶
-
通过 DAG 页面编排流水线
在 DAG 的编排页面,点击 全局设置 ,类型选择 node ,标签选择您自定义的标签即可。
-
通过 Jenkinsfile 编排流水线
在 Jenkinsfile 的 agent 片段中引用自定义的标签:
自定义流水线级别的 Agent¶
如果当前环境中只有一条流水线对某个特定的工具均有需求时,则只需要流水线中自定义 Agent 即可
在流水线中使用¶
-
选择一条流水线,进入 编辑 Jenkinsfile 界面
-
参考如下文件进行编辑:
FAQ¶
使用流水线自定义流水线级别的 Agent,如何默认继承父模版中的声明的 YAML 信息?¶
yamlMergeStrategy
参数支持 merge() 或 override(),用来控制模版中的 YAML 信息是被覆盖还是与继承的 pod 模版合并,默认为 override() 。
pipeline {
agent {
kubernetes {
yamlMergeStrategy merge() // 定义该策略后,将合并 base 模版中定义的 YAML
inheritFrom 'base' // 指定继承 pod 的模版标签
yaml '''
spec:
containers:
- name: mavenjdk11 // 声明容器名称
image: maven:3.8.1-jdk-11 // 定义容器镜像
'''
}
}
// 这里可以继续添加 pipeline 的其他部分
}
使用 inheritFrom 语法时,是否会继承父模版中的 volumeMounts 信息?¶
在使用 inheritFrom 语法时,分以下两种情况:
-
如果新增的容器有匹配到父模版同名容器,将继承父模板下容器的所有配置,即包含 volumeMounts、command、arguments 等等配置
-
如果没有匹配到父模版的容器,则不会继承父模板的 volumeMounts 信息,即按照当前定义信息添加到容器组中
当流水线运行失败后执行任务的容器组的也会被删除,如何延长存活时间,以便查看失败容器组的日志?¶
可以通过配置流水线的 activeDeadlineSeconds
、podRetention
参数,来实现容器组在指定时间后才会删除容器组。
- 前往 容器管理 -> 集群列表 ,选择您安装 Jenkins 的集群和命名空间(默认集群名称为 kpanda-global-cluster,命名空间为 amamba-system)
- 选择 配置与密钥 -> 配置项 ,选择 Jenkins 安装的命名空间,搜索配置项
global-jenkins-casc-config
-
选择 编辑 YAML , 搜索
jenkins.clouds.kubernetes.templates
,可以在每个容器模版下添加上述两个参数: -
保存配置项,等待约一分钟后,Jenkins 会自动重新加载配置,也可以选择重启 Jenkins 实例快速加载。