Jenkins Pipeline 从 K8s Agent 启动构建
构建时在K8S中启动一个Pod用来执行构建任务,构建结束后销毁Pod。
我的Jenkins中有如下K8S相关插件,我不确定哪些与该步骤相关。
- Kubernetes plugin
- Kubernetes :: Pipeline :: DevOps Steps
- Kubernetes Client API Plugin
- Kubernetes Continuous Deploy Plugin
- Kubernetes Credentials Plugin
# 配置连接K8S集群
# 在k8s中创建账号
kubectl -n infra create serviceaccount jenkins-robot
1
kubectl apply -f jenkins-clusterrolebinding.yaml jenkins-clusterrolebinding.yaml
jenkins-clusterrolebinding.yaml如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: jenkins-robot-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: jenkins-robot
namespace: infra
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
查看ServiceAccount的Secret
kubectl -n infra get sa jenkins-robot -o yaml
1
复制Secret中的token
kubectl -n infra get secret jenkins-robot-token-bpwmm -o yaml
1
Base64解码
echo "复制的token" | base64 -d
1
# 在Jenkins添加密钥
添加jenkins凭据 Manage Credentials
添加Secret Text类型的凭据
将解码出来的内容黏贴到Secret文本框中
Manage nodes and clouds -> configureClouds
地址:k8s地址
命名空间:上面创建账号所属的命名空间,也是Agent运行的命名空间
凭据:上面创建的凭据。
Jenkins地址:在K8S中能够访问到的当前Jenkins的地址。
Jenkins通道:在K8S中能够访问到的当前Jenkins的jnlp地址。
Pod Labels:可以不写,后面我们通过Pipeline填写Pod信息。
# 创建pipeline,在Agent中构建
env.label = "application-name"
//创建agent pod
podTemplate(label: env.label, cloud: 'kubernetes', containers: [containerTemplate(name: 'jnlp',
// 包含 docker kubectl的镜像,我用官方的jenkins-agent没法打包docker镜像所以自己基于jenkins-agent打包的,我不保证不同版本功能一致。
image: 'dragonmo/jenkins-agent-docker:1.2.6',
alwaysPullImage: false,
//root权限启动
privileged: true,
workingDir: '/root',
args: '${computer.jnlpmac} ${computer.name}'),],
//持久化工作目录
//我原本用pvc持久化一些东西减少网络io提高速度,后面发现Nfs的io本身更高。
//后面我改用了hostPathVolume(mountPath: '/root/workspace/', hostPath: '/jenkins-agent/workspace')
volumes: [persistentVolumeClaim(mountPath: '/root/workspace/', claimName: 'jenkins-agent'),]) {
//使用agent pod
node(env.label) {
stage('init') {
println("开始构建")
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
上次更新: 10/23/2024