寻找自定义(和多个)队列的jenkins插件

时间:2016-05-17 07:57:08

标签: jenkins jenkins-plugins

我正在尝试为以下用例找到jenkins插件:

  • 在Jenkins上创建了几个自由式项目(项目A,B和C),每个项目都由SVN提交触发。
  • 每个项目都有一个单独的队列,Qa,Qb和Qc。每个队列都会记录一堆构建作业请求。
  • 假设SVN预提交挂钩检测到项目A的提交尝试。然后在Jenkins上查询项目A的状态以查看它是否正在运行。
      
        
    • 如果它处于运行的中间,则挂钩将拒绝提交请求并记录用户的用户名并将日志消息提交到队列Qa的末尾,并发送电子邮件通知用户其提交被拒绝并排队。
    •   
    • 如果项目A不在运行中,则挂钩将检查Qa中排队的作业。如果Qa为空,则提交将通过挂钩并且项目A的作业将运行。如果Qa不为空,则挂钩将检查提交者是否与队列头部的作业相同。如果它们是同一个用户,则提交将运行并运行。否则,将拒绝提交并通知用户。
    •   
  • 当项目A的当前构建作业完成时,将发送电子邮件以通知所有用户,并且队列中的下一个作业已准备好运行。 Jenkins将等待提交触发它。
  • 队列应该能够通过Jenkins Web GUI进行操作。应支持删除作业和订单调整。

是否有类似的插件我可以修改或者我应该为此编写一个新的插件?

非常感谢, 彭

2 个答案:

答案 0 :(得分:0)

老实说,这听起来像是一个非常低效的过程...但是,如果你真的想要,你可以用jenkins完成大部分工作,但它需要一些自定义编程。我不知道我理解你所描述的多个队列。 Jenkins有一个构建队列,但是对于每个作业,您将能够看到"队列"到目前为止发生的构建。

您可以将作业设置为不允许并发运行,这将只实现在任何给定时间运行该特定作业之一。

至于在作业已经建立时拒绝提交,你可以编写代码来做到这一点,但为什么呢?更难的是在您拒绝提交后将作业排队。您将不得不在某处存储提交更改,然后以某种方式尝试重新发布哪个会启动您的工作。这不是一件容易的事。为什么不让提交通过,然后让下一个作业排队等待每次提交运行。你的过程听起来会削弱你的开发人员,特别是如果构建需要很长时间,你坦率地反对jenkins设计的持续集成精神。

你在最后2个要点(电子邮件,删除,工作订单)中描述的内容应该已经建立在jenkins的功能中(取决于你的意思"工作订单和#34;)。

答案 1 :(得分:0)

I have similar needs 
I define jobs jobA,jobB,jobC as upstream job,
each  upstream job will trigger different number download stream jobs, with different params,the number according to my config file.

we config a lot of download stream jobs,we can call them download stream jobs pool, like thead pool.
maybe dsjobs1,dsjobs2,dsjobs3,dsjobs4 ..... until to dsjobs50. each dsjobs bind to one build server,and each dsjob concurrency is not allowed.

when trigger jobsA, it will dispatch some subtasks to download stream jobs, like :
jobA -> dsjobs1 with param1
     -> dsjobs2 with param2
     -> dsjobs3 with param3

so did jobB and jobC.

so I want a  customs queue, I trigger subtasks to the queue, the queue dispatch subtasks to the download stream jobs pool.
each download stream job only running one task at the same times.
if all download stream jobs are running, the subtasks should be wait in the queue.
if there is one idle download stream jobsm, the queue will do dispatch.