分布式jenkins
搭建jenkins集群,水平扩展增加负载能力。使用kubernetes 插件:https://www.jenkins.io/doc/book/scaling/scaling-jenkins-on-kubernetes/这种方式是kubernetes动态创建pod来作为jenkins从节点(jenkins agent)
文章目录
搭建jenkins集群,水平扩展增加负载能力。随着Job数量增多,单实例Jenkins会出现构建队列过长的情况。为了能够容纳更多的团队同时使用,考虑使用kubernetes插件
这种方式在kubernetes动态创建pod来作为jenkins从节点(jenkins agent),因此Job是在从节点执行的,主节点只做任务分发,承担控制器的角色。本文将记录如何将这个插件落地。
kubernetes环境部署jenkins控制器
参考:https://www.jenkins.io/doc/book/installing/kubernetes/#install-jenkins-with-yaml-files
创建一个PVC,使用你喜欢的StorageClass。我这里使用的是NFS Storage Class。如何创建NFS Storage Class,参考这个开源项目:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
如下所示,使用之前创建的PVC,部署一个jenkins实例,并在http://${K8S_MASTER_NODE_IP}:30084
端口,访问jenkins UI界面。
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
hostAliases:
- ip: "192.168.10.8"
hostnames:
- "gitlab.example.com"
containers:
- name: jenkins
image: registry.example.com/cicd/jenkins:v1
ports:
- containerPort: 8080
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
volumes:
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins-pvc
---
apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30084
selector:
app: jenkins
配置jenkins 从节点的创建模板
不出意外的话,肯定要自定义jenkins agent的创建模板。
jenkins会自动在Pod中创建两个容器,agent容器和jnlp容器(用于和jenkins主节点通信)。
1. 打开系统管理-> 节点管理 -> Configure Clouds
2. 选择Add a new Cloud
3. 配置jenkins地址及jenkins agent pod 的k8s标签。
4. 配置自定义镜像及agent标签等信息
这一步就需要慢慢根据pod template生成的yaml调整了,构建需要什么,往镜像里打什么
一些凭据(docker私库登录密码),maven缓存,都可以创建PVC挂载到这个容器里。
比如maven缓存:
容器进行docker镜像构建,需要挂载:
其他的凭据,npm缓存挂载都类似。
测试
创建一个流水线Job, 将下面内容粘贴进去。
pipeline {
agent {
node {
label 'jenkins-agent'
}
}
stages {
stage('Test') {
steps {
container('jdk') { // 对应pod template中配置的容器名称,表示在此容器里执行命令
// 打进jdk镜像里的工具都可以在这里测试
sh 'docker ps'
sh 'mvn -v'
sh 'git version'
}
}
}
执行Job, 可以发现一个Pod已经被创建出来执行构建任务
同时在控制台日志里也可以看到Pod Template的YAML定义
更多推荐
所有评论(0)