当前位置: 首页 > 面试题库 >

如何使管道作业等待所有触发的并行作业?

潘凯
2023-03-14
问题内容

我将Groovy脚本作为Jenkins中Pipeline工作的一部分,如下所示:

node {
    stage('Testing') {
        build job: 'Test', parameters: [string(name: 'Name', value: 'Foo1')], quietPeriod: 2, wait: false
        build job: 'Test', parameters: [string(name: 'Name', value: 'Bar1')], quietPeriod: 2, wait: false
        build job: 'Test', parameters: [string(name: 'Name', value: 'Baz1')], quietPeriod: 2, wait: false
        build job: 'Test', parameters: [string(name: 'Name', value: 'Foo2')], quietPeriod: 2, wait: false
        build job: 'Test', parameters: [string(name: 'Name', value: 'Bar2')], quietPeriod: 2, wait: false
        build job: 'Test', parameters: [string(name: 'Name', value: 'Baz2')], quietPeriod: 2, wait: false
    }
}

由于将wait标记设置为,因此它并行执行多个其他自由式作业false。但是,我希望所有作业完成后才能完成呼叫者作业。目前,Pipeline作业会触发所有作业并在几秒钟后自行完成,这不是我想要的,因为我无法跟踪总时间,而且我无法一次取消所有已触发的作业。

当并行完成所有作业时,如何纠正上述脚本以完成管道作业?

我试图将构建作业包装在waitUntil {}块中,但是没有用。


问题答案:

您应该使用管道 并行 表达式,它将等待所有产生的作业/子任务完成:

stage('testing') {
    def branches = [:]

    for(i = 0; i < params.size(); i += 1) {
        def param = params[i]

        branches["Test${i}"] = {
            build job: 'Test', parameters: [string(name: 'Name', value: param)], quietPeriod: 2
        }
    }
    parallel branches
}

您可以在jenkins.io的管道文档中找到更多示例。



 类似资料:
  • 我正在尝试设置各种Jenkins管道,其最后阶段总是运行一些验收测试。长话短说,所有产品的验收测试和测试数据(其中大部分是共享的)都被检查到同一个存储库中,该存储库的大小约为0.5 GB。因此,似乎最好为验收测试设置一个单独的作业,并通过每个管道的“构建”步骤触发它,并提供适当的参数来运行相关测试。(有时在不重建产品的情况下重新运行这些测试也很有用) 到目前为止,我发现我可以: 正常触发作业。但这

  • 我有一个工作,将连续访问一个数据库,并计算一个表中的行数。当数量达到某个阈值时,作业必须停止检查表并触发一些新的作业。现在,我正在尝试使用来执行此操作,但我不确定如何删除第一个作业。即: (2)当有5行时,Job1将。 (3)现在Job2需要启动,Job1必须停止运行。如何删除Job1?我知道,但我不确定何时或何处调用它,因为我不能在类中为更改。 此外,我如何触发Job2开始运行在这一点?我已经读

  • 问题内容: 如何更改以下代码,以触发两个异步操作并有机会同时运行? 我需要做这样的事情吗? 问题答案: TL; DR 不要在获得承诺的问题中使用模式,而是分别等待它们;而是使用(至少现在): 虽然您的解决方案 确实 并行运行这两个操作,但如果两个诺言都被拒绝,它就无法正确处理拒绝。 细节: 您的解决方案并行运行它们,但始终等待第一个完成,然后再等待第二个。 如果您只想启动它们,并行运行它们,并获得

  • 问题内容: 我如何更改以下代码,以触发两个异步操作并有机会同时运行? 我需要做这样的事情吗? 问题答案: TL; DR 不要在获得承诺的问题中使用模式,而是分别等待它们;而是使用(至少现在): 虽然您的解决方案确实并行运行这两个操作,但是如果两个诺言都被拒绝,它就无法正确处理拒绝。 细节: 您的解决方案并行运行它们,但始终等待第一个完成,然后再等待第二个。如果您只想启动它们,并行运行它们,并获得两

  • 我有一个系统,其中REST API(Flask)使用spark-sumbit向正在运行的PySpark发送作业。 出于各种原因,我需要spark同时运行所有任务(即我需要设置执行器的数量=运行时的任务数量)。 这可能通过一项工作来实现吗?

  • 问题内容: 我希望我的Jenkins多分支管道工作避免触发自身。作业之所以提交,是因为它将递增版本文件并将其检入源代码管理,这将导致无限循环。 在常规工作中,我可以按照以下说明操作来避免这种循环(尽管这不是最干净的方法)。 这些说明不适用于多分支管道(没有“忽略某些用户的提交”选项)。Jenkins多分支管道中是否有任何方法可以防止自我触发的提交? 问题答案: 如果使用GIT,一种解决方法: 更改