6

我有 4 个作业需要按以下顺序执行

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

在上述

  1. A 应该同时触发 B 和 C,C 反过来触发 D。
  2. A 应该保持工作运行,直到他们三个都完成。

我尝试了以下插件,但无法实现我想要的

  • 加入插件
  • 多任务插件
  • 多配置项目
  • 参数化触发器插件

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

4

5 回答 5

2

DSL 脚本Build Flow插件一起使用。

尝试执行此示例:

   build("job A")

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

   build("job D")
于 2015-06-25T11:09:29.843 回答
1

我正在尝试构建相同的系统。我正在构建一个认证管道,我需要在其中运行打包/构建/部署作业和相应的测试作业。当所有这些都成功时,我想汇总测试结果并触发可以进行自动化 maven 发布的发布作业。

我选择了构建管道插件来实现系统的可视化。最初尝试使用带有阻塞构建的参数化触发器插件。我无法以这种方式设置归档工件/指纹和下游构建关系,因为归档工件仅在 postbuild 中有效。然后我将参数化触发器放在构建后活动中。通过这种方式,我能够设置下游构建、指纹识别、汇总测试结果,但构建失败并没有冒泡到上游作业链,上游作业是非阻塞的

我终于能够使用这些插件来实现这一点-

  • 构建管道
  • 多任务插件
  • 指纹插件
  • 复制工件插件
  • 加入插件

我正在使用詹金斯 1.514

系统看起来像这样

触发作业 --> 构建(和部署)作业 (1..n) ---> 测试作业 (1..n)

触发作业 -

  • 创建为 MultiJob 并在 shell exec 中创建指纹文件

    回声date +%s>指纹.txt

诀窍是文件需要在构建期间存档,以执行此脚本-

ARCHIVEDIR=$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive
mkdir $ARCHIVEDIR
cp fingerprint.txt $ARCHIVEDIR
  • 创建由构建/部署作业组成的多作业阶段。
  • 构建/部署作业本身就是一个多作业
  • 按照与上述指纹识别相关的相同步骤创建构建/部署作业。
  • 从上游作业复制指纹.txt 工件
  • 在触发测试作业的部署作业中设置 MultiJob 阶段
  • 创建一个新的指纹文件并强制将其存档,类似于上述步骤
  • 在最终测试作业中收集 Junit 结果。


在 trigger Job 中,使用 Join Plugin 通过选择“Run Post Build Actions at join”来执行 Release Job,并仅在 Trigger Job 的稳定构建上执行发布项目。这样,所有步骤都显示在 Build Pipeline 视图中,并且 Trigger 作业正在阻止所有下游构建完成,并将其状态设置为最差的下游构建,以便为发布作业提供决策点。

于 2013-07-23T00:49:17.410 回答
1

试试Locks and Latches 插件

于 2012-10-16T22:26:19.100 回答
1

多任务插件

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

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

于 2014-12-12T18:23:52.267 回答
1

这可能不是最佳方式,但它应该有效。使用参数化触发器插件。对于作业 A,添加一个构建步骤(不是构建后操作)以在同一构建步骤中同时启动作业 B 和 C,并阻止它们完成。在 Job C 中,添加一个构建步骤(不是 Post Build Action),它启动 Job D 并阻塞直到它完成。这应该让 Job A 一直运行。

但这并不是最理想的:作业 A 处于打开状态,等待 B 和 C 完成。然后 C 保持打开直到 D 完成。

作业 A 需要在这段时间内保持运行是否有某种原因?另一种可能性是在 B 和 C 启动后让 Job A 终止,但在 Job A 上进行升级,它将在 Job B、C 和 D 成功后执行您的最终操作。

于 2012-10-17T03:13:27.603 回答