【问题标题】:How can I run parallel jobs efficiently with a pipeline without having queueing of builds如何在没有构建排队的情况下使用管道有效地运行并行作业
【发布时间】:2019-05-24 12:50:56
【问题描述】:

我有一个类似下面的管道。

    stage('Build, run, report') {
        for (int i = 0; i < components.size(); ++i){
            builds[i] = {
                stage('Build') {
                    build job: 'Build', parameters: [string(name: 'Component', value: component)]
                }

                stage('Run') {
                   build job: 'Run', parameters: [string(name: 'Component', value: component)]
                }

                stage('Reporting') {
                   'Reporting', parameters: [string(name: 'Component', value: component)]
                }
        }
        }
        parallel builds

这里的“组件”是来自管道参数的列表。我想根据组件的数量运行相同的流程。

我只有一个从节点和 4 个执行器。如果我有 10 个组件,4 个将立即开始运行,另外 6 个将排队等待执行器空闲。

我可以在列表中获得超过 50 个组件,并且队列中有一些看起来不太好,我认为这不是正确的方法。(我怀疑构建的限制可能是也在排队。)

我们有没有办法暂停并行触发,直到执行器/从机可用,并在执行器/从机空闲时一个接一个地恢复?

或者我们有比管道中并行运行更好的方法来处理它吗?

【问题讨论】:

标签: jenkins jenkins-pipeline jenkins-plugins jenkins-groovy


【解决方案1】:

我自己没有尝试过,但也许您可以考虑在每 4 个组件计数后使用安静期进行构建作业。

【讨论】:

  • 我已经看到我可以修复相当时期。但它在这里有什么用处?如果你能多解释一点会很有帮助。
  • 正如我所说,我没有设置有多个从站来测试这个.....但这就是我的想法。使用类似下面的内容来获取构建的平均等待时间(在构建后的 groovy 脚本中添加下面的脚本)job = hudson.model.Hudson.instance.getItem("demo") build = job.getLastBuild() action = build.getAction(jenkins.metrics.impl.TimeInQueueAction.class) println action.getQueuingDurationMillis() 然后使用等待时间作为安静期。这不会停止将构建添加到队列中,而是等待暂停构建被触发。
  • @Sushanth 感谢您的回复.. 这是一个新的学习。我会尝试一下并在此处发布状态。
猜你喜欢
  • 2019-02-10
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
相关资源
最近更新 更多