2012-10-16 83 views
5

我有需要4个作业中的以下序列詹金斯并行触发和等待

JOB A 
|------> JOB B 
|------> JOB C 
      |------> JOB D 

执行在上述

  1. A应该触发乙&Ç平行和C inturn触发D.
  2. A应该持续工作,直到所有3人完成。

我尝试了以下插件,并不能达到我所期待的

  • 加入插件
  • 多椎插件
  • 多配置项目
  • Paramterized触发插件

是否有任何插件,我没有尝试过会帮助我解决这个问题。或者这可以通过不同的方式实现。请指教。

回答

1
+0

[它很快就被弃用(https://wiki.jenkins-ci.org/display/JENKINS/Proposed+Plugin+Deprecation)。无论如何,我也找不到有关如何使其工作的任何文档?你有什么? – raksja

+0

看到[这](http://stackoverflow.com/a/6279210/150371),但甚至无法弄清楚如何释放锁等 – raksja

1

这可能不是最佳的方式,但它应该工作。使用参数化触发器插件。对于作业A,添加构建步骤(而不是后期构建操作),以在同一构建步骤和阻止中启动作业B和C直至完成。在作业C中,添加一个构建步骤(不是后期构建操作),该步骤启动作业D AND块直至完成。这应该让工作A在整个持续时间内运行。

虽然这并不是最佳选择:作业A保持开启状态,等待B和C完成。然后C保持开放直到D完成。

工作A需要保持持续运行的原因是否有某些原因?另一种可能性是在B和C启动后让作业A终止,但在作业A上有促销活动,在B,C和D作业成功后执行最后的行动。

+0

感谢您的建议@Jason。我想我已经尝试过这种方法。但是这里的问题是我需要向B&C传递2个不同的参数集。对于B,它在哪个Node上运行(使用NodeLabel插件)以及C属性集。 _参数化触发插件中没有选项可以同时触发2个作业,使用2组不同的参数。_ :( – raksja

1

我想建立一个相同的系统。我正在构建一个认证管道,我需要运行打包程序/构建/部署作业和相应的测试作业。当它们全部成功时,我想汇总测试结果并触发可以执行自动化Maven发布的发布作业。

我选择了构建管道插件用于系统的可视化。最初尝试使用具有阻止构建的参数化触发器插件。由于对工件进行归档工作仅适用于postbuild,因此我无法设置归档工件/指纹和下游构建关系。然后,我将参数化触发器置于后期构建活动中。这样,我就能够建立下游建立,指纹识别,汇总检查结果,但构建失败并没有冒泡上游作业链和上游的工作是非阻塞

我终于能够这样使用这些插件 -

实现
  • 构建流水线
  • 多椎插件
  • 指纹插件
  • 复制文物插件
  • 加入插件

我使用詹金斯1.514

系统看起来像这样

触发工作 - >建(和部署)工作(1..N)--->测试工作(1 .. N)

触发工作 -

  • 创建为多椎和创建外壳EXEC指纹文件

    呼应date +%s> fingerprint.txt

诀窍是,文件需要构建期间存档,做执行该脚本 -

ARCHIVEDIR=$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive 
mkdir $ARCHIVEDIR 
cp fingerprint.txt $ARCHIVEDIR 
  • 创建一个由多椎阶段构建/部署作业。
  • 构建/部署作业本身是一个多任务
  • 遵循相同的步骤创建构建/部署作业与上述相关 指纹。
  • 复制从上游作业的fingerprint.txt工件
  • 设置多椎相在部署作业触发测试作业
  • 创建一个新的指纹文件和力归档类似于上述步骤在
  • 收集Junit的结果最终测试工作。


在触发作业,请加入插件,通过选择“运行后生成的加入操作”,只有在触发工作的稳定版执行释放项目执行解除作业。 这样所有步骤都显示在Build Pipeline视图中,并且触发器作业正在阻止所有下游构建完成并将其状态设置为最差的下游构建,以便为释放作业提供决策点。

+0

听起来像是一个有趣的连续传送管道解决方案。想知道是否没有简单的方法。 – vezenkov

1

多椎插件

如果你想停止与下行/上行作业链定义的混乱。或者当你想添加一个完整的Jenkins作业层次结构时,它们将按顺序或并行执行。将上下文添加到您的构建流中,实现从MultiJob到其所有阶段和作业的参数继承。阶段是连续的,而每个阶段内的作业是平行的。

https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin

+0

This Plugin也可以用于管理并行/串行任务:[https://wiki.jenkins-ci.org/display/JENKINS/Dependency+Graph+View+Plugin] –

+0

这也可以给一些想法:[http:// stackoverflow .COM /问题/ 4510640 /命令行 - 什么 - 是最专门的] –

2

使用DSL脚本建立流动插件。

尝试这个例子为您执行:

build("job A") 

    parallel 
    (
     {build("job B")} 
     {build("job C")} 
    ) 

    build("job D")