目录
在当今软件开发生命周期中,持续集成/持续部署(CI/CD)已成为提高开发效率、确保软件质量的关键环节。Jenkins作为一款开源的自动化服务器软件,凭借其丰富的插件生态和灵活的扩展性,在CI/CD领域占据了举足轻重的地位。然而,随着软件开发项目的日益复杂和团队规模的逐渐扩大,传统的静态slave配置方式已经难以满足快速变化的需求。
为了应对这一挑战,Jenkins动态slave应运而生。它利用Kubernetes等容器编排工具,实现了slave节点的动态创建、销毁和调度,从而提高了资源利用率、处理能力和系统稳定性。本文旨在深入探讨Jenkins动态slave的优势、配置方法以及在实际项目中的应用,为开发者提供一个全面、系统的解决方案。
所需环境
Kubernetes集群,本案例使用的是1.23版本
安装nfs
部署Jenkins的时候使用nfs存储了所以需要部署nfs
bash
yum -y install nfs-utils rpcbind
mkdir -p /data/k8s
echo '/data 192.168.207.0/24(rw,no_root_squash)' >> /etc/exports
systemctl start nfs rpcbind
systemctl enable nfs rpcbind
chmod -R 777 /data
k8s所有节点安装nfs软件包
bash
yum -y install nfs-utils rpcbind
部署Jenkins
上传yaml文件jenkins-yaml
bash
# 修改pvc.yaml文件的ip地址,修改为nfs节点的IP
# 因为命名空间没有创建,所以第一次执行可能会有失败的,可以在执行一遍或者提前把命名空间创建出来
kubectl apply -f jenkins-yaml
# 查看Jenkins是否运行起来
[root@master ~]# kubectl get pod -n kube-ops
NAME READY STATUS RESTARTS AGE
jenkins2-5959957d7d-4sp9d 1/1 Running 0 4h14m
# 查看Jenkins的service
[root@master ~]# kubectl get svc -n kube-ops
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins2 NodePort 10.1.203.46 <none> 8080:30002/TCP,50000:32090/TCP 4h14m
安装插件
浏览器访问http://<K8S节点的任意节点IP>:30002
安装推荐插件
登录Jenkins
安装kubernetes插件
点击Available plugins 在搜索框里面搜索kubernetes,点击勾选,然后点击安装,安装好以后可以重启Jenkins
添加凭据
添加K8S的凭据,把K8S的master节点下的/root/.kube目录下的config文件复制到本地
配置动态slave
连接kubernetes集群
配置Jenkins地址
Jenkins地址填写 http://jenkins2.kube-ops.svc.cluster.local:8080 ,
这里的格式为:
服务名.namespace.svc.cluster.local:8080
Jenkins通道填写:jenkins2.kube-ops.svc.cluster.local:50000
配置Pod模板
这里名称就写jnlp,镜像填写jenkins/inbound-agent
运行的命令和命令参数为空
确认代理端口
确认 全局安全配置 下的 代理 是 指定端口50000
创建任务测试
构建的时候K8S会自动创建pod,构建完成以后自动销毁
bash
[root@master ~]# kubectl get pod -n kube-ops
NAME READY STATUS RESTARTS AGE
jenkins2-5959957d7d-4sp9d 1/1 Running 0 4h41m
jnlp-8r324 1/1 Running 0 16s
[root@master ~]# kubectl get pod -n kube-ops
NAME READY STATUS RESTARTS AGE
jenkins2-5959957d7d-4sp9d 1/1 Running 0 4h41m