网站首页 > 博客文章 正文
pipeline中,可以通过parallel,并行跑多个job。但是如果想限制并行跑的job个数,应该如何做呢?
比如说有10个job,要并行跑,但是目前资源有限,只允许最多3个同时跑,那这种情况下,应该如何修改Jenkinsfile,来满足这个需求?
通过自己的摸索,发现用以下方法,可以实现。
下图有6个job,test1-test6,这6个job,是希望并行跑的,但是在一个时刻,最多只有2个job能够并行跑。
直接上Jenkinsfile代码:
pipeline {
agent any
stages {
stage("parallel test") {
steps {
script {
def branches = [:]
MAX_CONCURRENT = 2
//创建fifo
latch = new java.util.concurrent.LinkedBlockingDeque(MAX_CONCURRENT)
//往fifo中,填入最大个数元素
for(int i=0; i<MAX_CONCURRENT; i++)
latch.offer("$i")
def job_list = [
"test1",
"test2",
"test3",
"test4",
"test5",
"test6"
]
for(int i=0; i<job_list.size; i++) {
def name = job_list[i]
branches[name] = {
def thing =
waitUntil {
//获取一个资源
thing = latch.pollFirst;
return thing != ;
}
try {
//执行job
build(job: name, propagate: false)
}
finally {
//释放一个资源
latch.offer(thing)
}
timestamps {
parallel branches
本质上,利用了java的LinkedBlockingDeque这个类,以下网站是介绍这个类:
将以上代码,写入到pipeline job配置的pipeline选项框中,注意,不能勾选Use Groovy Sandbox。
当然也可以把代码,写入到Jenkinsfile文件中,然后执行job需要执行的Jenkinsfile即可。
执行log如下,test1和test2首先执行,能够获取到资源,得到执行,之后的job,获取不到资源,然后被阻塞。
test1和test2执行完毕后,会释放资源,test3和test4获取到资源,然后开始执行。
执行完后,blueocean显示如下:
从blueocean看出,test1和test6是并行执行的,但是在真实环境中,他们并不是同时执行的。
招聘信息
猜你喜欢
- 2024-09-20 Pipeline+Jenkins流水线构建(jenkins工作流)
- 2024-09-20 用代码描述流水线-Jenkins Pipeline 详解
- 2024-09-20 微服务从代码到k8s部署应有尽有大结局(k8s部署)
- 2024-09-20 持续集成工具 Jenkins 的使用(jenkins持续集成自动化测试)
- 2024-09-20 测试开发丨从零开始,手把手教你在Jenkins中创建Pipeline Job!
- 2024-09-20 Jenkins Pipeline 部署 Kubernetes 应用
- 2024-09-20 Jenkins Pipeline 结合 Gitlab 实现 Node 项目自动构建
- 2024-09-20 别再用jenkins freestyle了,教你快速编写jenksinfile,离线调试
- 2024-09-20 Jenkins 持续集成企业实战示例(jenkins持续集成原理)
- 2024-09-20 基于Docker平台的Jenkins项目管理(5)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)