【问题标题】:Jenkins Parallel Trigger and WaitJenkins 并行触发和等待
【发布时间】:2012-10-16 22:19:25
【问题描述】:

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

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

在上面

  1. A 应该并行触发 B 和 C,而 C 反过来触发 D。
  2. A 应保持作业运行,直到所有 3 个作业完成。

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

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

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

【问题讨论】:

    标签: jenkins hudson jenkins-plugins hudson-plugins


    【解决方案1】:

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

    尝试执行此示例:

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

    【讨论】:

      【解决方案2】:

      【讨论】:

      • Its soon to be deprecated。无论如何,我也找不到任何有关如何使其工作的文档?你有吗?
      • 看到了this,但甚至不知道如何释放锁等。
      【解决方案3】:

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

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

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

      【讨论】:

      • 感谢您的建议@Jason。我想我已经尝试过这种方法。但这里的问题是我需要将 2 组不同的参数传递给 B 和 C。对于 B,它位于要运行的节点(使用 NodeLabel 插件)和 C 的一组属性上。 参数化触发器插件中没有选项可以使用 2 组不同的参数同时触发 2 个作业。 :(
      【解决方案4】:

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

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

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

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

      我正在使用 Jenkins 1.514

      系统是这样的

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

      触发作业 -

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

        echo 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 作业正在阻止所有下游构建完成,并将其状态设置为最差的下游构建,以便为发布作业提供决策点。

      【讨论】:

      • 听起来像是一个有趣的持续交付管道解决方案。想知道有没有简单的方法。
      【解决方案5】:

      多任务插件

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

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

      【讨论】:

      猜你喜欢
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2023-01-07
      相关资源
      最近更新 更多