持续集成 jenkins 如何防止多个 job 同时执行呢?

Time · 2022年03月24日 · 最后由 Time 回复于 2022年03月28日 · 7175 次阅读

问题描述:

  1. 现在有一台手机 有 A,B,C 三个 JOB 作用于这台手机上,不允许同时执行三个 JOB,可在执行时按照时间进行串行
  2. 不是上下游关系构建的形式,不希望使用
最佳回复

你这种属于指定 job 之间不允许并行,目前 jenkins 好像没见到有类似这样的功能可供配置。

可以考虑下面几个方向:

1、状态合并。三个 job 合一,用参数区分。这样借助 Job 本身的不允许并行构建可以做到。缺点是相关的定时任务什么的也都被合并了,会增加维护成本。

2、状态共享。建立一个临时文件,用于记录这个手机上是否已经有别的 job 在用(比如 job 开始跑时创建这个文件,跑完后删掉这个文件)。每次 job 运行时先查这个文件内容,如果有,那 job 就直接结束不跑或者轮询等待直到可以跑。基本上云真机平台共享设备资源也是类似这样的做法,只是为了避免意外退出设备持续被占用,一般会额外加个使用时必须保活 + 没有保活则超时自动释放的机制。

3、执行器限制。三个 job 的执行器都分配到一个最多只能同时跑一个任务的执行器上,这样执行器自动会保障 3 个 job 同一时间只有一个在跑,剩余的排队。缺点是为了这个需求额外弄一个执行器,有点不值当。

Time #2 · 2022年03月28日 Author

前言

问题来源: 当我们执行 UI 自动化测试时可能会涉及到,一台手机跑多个用例的过程亦或者多个 APP 的过程测试,但是一台手机只允许一个模块或者一个 APP 的自动化测试,因此 JOB 之间存在着手机资源的争抢问题,为了防止两个模块被同时进行(因为可能不是自己操作,自己操作会主动去看下,但是不清楚的业务测试同学我们需要帮他们去规避这个问题)

一、安装插件

安装 Lockable Resources 插件,插件的主要功能
在这里插入图片描述
安装完毕后进行重启 Jenkins

配置插件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据自己需要给资源起个 Name 和标签即可,应用并保存

配置 JOB

  1. 给需要加锁的 JOB 配置好锁名,如图 UI_Auto_Search JOB 构建时需要占用到 search 锁,且占用资源为 1 在这里插入图片描述
  2. 我们把另外一个 JOB(BBJ_Auto_Search)也配置为同样的 search 锁占用资源也为 1

结果展示

当 UI_Auto_Search 执行时,BBJ_Auto_Search 被放在构建队列中,此时资源不足,需要等待构建,我们也可以主动去释放资源,释放完,可以正常构建。
在这里插入图片描述
在这里插入图片描述

共收到 7 条回复 时间 点赞

你这种属于指定 job 之间不允许并行,目前 jenkins 好像没见到有类似这样的功能可供配置。

可以考虑下面几个方向:

1、状态合并。三个 job 合一,用参数区分。这样借助 Job 本身的不允许并行构建可以做到。缺点是相关的定时任务什么的也都被合并了,会增加维护成本。

2、状态共享。建立一个临时文件,用于记录这个手机上是否已经有别的 job 在用(比如 job 开始跑时创建这个文件,跑完后删掉这个文件)。每次 job 运行时先查这个文件内容,如果有,那 job 就直接结束不跑或者轮询等待直到可以跑。基本上云真机平台共享设备资源也是类似这样的做法,只是为了避免意外退出设备持续被占用,一般会额外加个使用时必须保活 + 没有保活则超时自动释放的机制。

3、执行器限制。三个 job 的执行器都分配到一个最多只能同时跑一个任务的执行器上,这样执行器自动会保障 3 个 job 同一时间只有一个在跑,剩余的排队。缺点是为了这个需求额外弄一个执行器,有点不值当。

可以利用构建触发器把三个 Job 串行起来,A 跑完后跑 B,B 跑完后跑 C,控制 A 的触发即可控制 B、C 的触发。

Time #3 · 2022年03月24日 Author
陈恒捷 回复

😀 谢谢提供建议,很中肯。第二点感觉可以满足需求

Time #4 · 2022年03月24日 Author
Clouds 回复

目前是不需要一个 job 执行完去执行另一个,只是为了防止有时两个 job 被不同的人都在执行同一台手机,导致打架


这个配置可行吗?

在 job 里面配置的时候串起来依赖。或者分 slave 执行

Time #2 · 2022年03月28日 Author

前言

问题来源: 当我们执行 UI 自动化测试时可能会涉及到,一台手机跑多个用例的过程亦或者多个 APP 的过程测试,但是一台手机只允许一个模块或者一个 APP 的自动化测试,因此 JOB 之间存在着手机资源的争抢问题,为了防止两个模块被同时进行(因为可能不是自己操作,自己操作会主动去看下,但是不清楚的业务测试同学我们需要帮他们去规避这个问题)

一、安装插件

安装 Lockable Resources 插件,插件的主要功能
在这里插入图片描述
安装完毕后进行重启 Jenkins

配置插件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据自己需要给资源起个 Name 和标签即可,应用并保存

配置 JOB

  1. 给需要加锁的 JOB 配置好锁名,如图 UI_Auto_Search JOB 构建时需要占用到 search 锁,且占用资源为 1 在这里插入图片描述
  2. 我们把另外一个 JOB(BBJ_Auto_Search)也配置为同样的 search 锁占用资源也为 1

结果展示

当 UI_Auto_Search 执行时,BBJ_Auto_Search 被放在构建队列中,此时资源不足,需要等待构建,我们也可以主动去释放资源,释放完,可以正常构建。
在这里插入图片描述
在这里插入图片描述

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册