Jenkins利用k8s集群实现动态Slave并发构建
Jenkins利用k8s集群实现动态Slave并发构建环境Jenkins Master采用war包直接jar -jar jenkins.war本地服务器运行Jenkins安装Kubernetes Plugin插件K8S集群正常设置Jenkins -> Configure System -> “云” -> kubernetes相关配置。问题不能并发创建Slave Po...
Jenkins利用k8s集群实现动态Slave并发构建
环境
Jenkins Master采用war包直接jar -jar jenkins.war本地服务器运行
Jenkins安装Kubernetes Plugin插件
K8S集群
正常设置Jenkins -> Configure System -> “云” -> kubernetes相关配置。
问题
不能并发创建Slave Pod进行并发构建
触发多个Maven项目Job构建时,前一个Job正常分配1个Slave Pod,后一个Job在“构建队列”一直处于“Waiting for next available executor”状态几分钟。偶尔Jenkins会分配1个新Slave Pod,大部分时候会等待前一个Job完成后重用Slave Pod。无法满足并发创建Slave Pod进行并发构建的需求。
不能并发创建Slave Pod进行并发构建,是Jenkins的调度策略问题。
默认情况下,Jenkins创建Slave Pod很保守。假设当前有2个Job等待执行,Jenkins会先创建1个Slave Pod执行第一个Job,然后等待这个Slave Pod执行完Job,等待一定时间如果这个Slave Pod还未空闲,则再创建1个Slave Pod执行第二个Job。Jenkins调度策略尝试最大化利用每个Slave Pod。
可以通过调整一些参数来改变Jenkins的默认调度策略:
-Dhudson.model.LoadStatistics.clock=2
-Dhudson.slaves.NodeProvisioner.initialDelay=0
-Dhudson.slaves.NodeProvisioner.MARGIN_DECAY=0.1
-Dhudson.slaves.NodeProvisioner.MARGIN=50
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
如上参数设置可以加快Jenkins调度Slave Pod,提高效率。
具体Jenkins调度策略这里没有深究,感兴趣可以查看Jenkins源码。
jar命令运行,
java -jar -Dhudson.model.LoadStatistics.clock=2 -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN_DECAY=0.1 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85 jenkins.war
参考资料
更多推荐
所有评论(0)