为了尽可能快地获得反馈,我们偶尔会希望Jenkins的作业能够并行运行 . Jenkins能够在作业完成时启动多个下游作业(或“分叉”管道) . 但是,Jenkins似乎没有任何方法可以使下游作业只启动该fork的所有分支成功(或者将fork连接在一起) .
詹金斯有一个"Build after other projects are built"按钮,但我将其解释为“当 any 上游工作完成时" (not " __当开始这项工作 all 上游工作成功时”) .
这是我'm talking about. Does anyone know if a plugin exists to do what I'之后的可视化?
编辑:
当我最初在2012年发布这个问题时,Jason的答案(Join和Promoted Build插件)是最好的,而且我选择了解决方案 .
然而,dnozay的回答(The Build Flow插件)在这个问题之后大约一年左右流行,这是一个更好的答案 . 对于它的 Value ,如果人们今天问我这个问题,我现在建议改为 .
6 回答
我过去使用过两种解决方案:
在"deploy"作业上使用Join Plugin并指定"promote"作为目标作业 . 您必须将"Functional Tests"和"Performance Tests"指定为已加入的作业,并以某种方式通过构建后启动它们 . Parameterized Trigger Plugin对此有好处 .
在"deploy"作业上使用Promoted Builds Plugin,指定在下游作业完成时有效的促销,并指定功能和性能测试作业 . 作为促销活动的一部分,触发"promote"工作 . 您仍然必须从"deploy"开始两个测试作业
这两种解决方案都有一个重要方面:必须正确使用指纹 . 这是我发现的:
"build"作业必须初始化新的指纹文件 . 换句话说,它必须指出Jenkins认为是由初始作业发起的一些文件 . 仔细检查作业的"See Fingerprints"链接以验证这一点 .
所有下游链接作业(在本例中为"deploy","Functional Tests"和"Performance tests")需要获取并指纹同一文件 . Copy Artifacts插件非常适合这类事情 .
请记住,某些插件允许您更改指纹识别和下游作业启动的顺序;在这种情况下,指纹必须在下游作业指纹同一文件之前发生,以确保正确设置指纹的ORIGIN .
Pipeline插件
您可以使用Pipeline Plugin(以前为
workflow-plugin
) .它附带many examples,你可以按照这个tutorial .
例如
构建流程插件
您也可以使用Build Flow Plugin . 它简直太棒了 - 但它已被弃用(开发冻结) .
设置作业
创建工作:
build
部署
性能测试
功能测试
促销
设置上游
build
)创建一个独特的神器,例如:归档
build.tag
工件 .记录指纹以跟踪文件使用情况;如果任何作业复制相同的
build.tag
文件并记录指纹,您将能够跟踪父项 .配置在
promotion
作业成功时获得提升 .设置下游作业
我使用了2个参数
PARENT_JOB_NAME
和PARENT_BUILD_NUMBER
使用Copy Artifact Plugin从上游
build
作业复制工件项目名称=
${PARENT_JOB_NAME}
哪个版本=
${PARENT_BUILD_NUMBER}
要复制的工件=
build.tag
记录指纹;这至关重要 .
设置下游促销作业
与上述相同, Build 上下游关系 . 它不需要任何构建步骤 . 您可以执行其他后期构建操作,例如“嘿QA,轮到你了” .
创建构建流程作业
祝好运 .
Jenkins最近announced对工作流程的一流支持 .
Multijob plugin可以很好地适应这种情况 . 如果您希望单个"parent"作业启动多个"child"作业但仍能够自己手动执行每个子项,它也会派上用场 . 这可以通过创建"phases"来实现,您可以向其中添加1到n个作业 . 构建仅在整个阶段完成后才会继续,因此如果一个阶段作为多个作业,则必须在执行其余任务之前完成 . 当然,如果阶段内存在故障,则可以配置构建是否继续 .
jason和dnozay的答案已经足够好了 . 但如果有人正在寻找简单的方法,只需使用JobFanIn plugin .
我相信Workflow Plugin现在被称为Pipeline Plugin,并且是原始问题的(当前)首选解决方案,受Build Flow Plugin的启发 . GitHub中还有一个Getting Started Tutorial .