Jenkins声明性流水线:Jenkins如何执行动态列表的作业?

45次阅读
没有评论

问题描述

在使用Jenkins时,用户面临一个问题:他已经成功地并行执行了一个较长的动态构建任务列表。但在某些特定的情况下,他需要按照顺序依次执行这些构建任务。他想知道是否有办法在保持已生成的并行执行构建任务列表的基础上,以顺序的方式依次执行它们。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

最佳解决方案

在Jenkins的声明性流水线中,您可以在script块内执行任意Groovy代码,因此您可以在script块内实现各种操作。

根据您的问题描述,以下是一个解决方案示例,可以实现将构建任务列表按照顺序依次执行:

stage ('执行作业') {
    steps {
        node('node1') {
            script {
                parallel_jobs = [:]
                if (params.includeJob1 == "true") {
                    parallel_jobs['ci'] = {
                        build job: job1, parameters: [], propagate: true
                    }
                }
                parallel_jobs['second'] = {
                    build job: job2, parameters: [], propagate: true
                }
                // ... 其他动态添加到 parallel_jobs 列表的作业
                // ... parallel_jobs['etc'] = ...

                if (params.parallel) {
                    // 并行执行作业
                    parallel(parallel_jobs)
                } else {
                    // 顺序执行作业
                    parallel_jobs.each { name, closure->
                        closure.call()
                    }
                }
            }
        }
    }
}

在这个解决方案示例中,我们在script块内定义了parallel_jobs字典,其中包含了所有要执行的构建任务。根据参数params.parallel的值,我们可以选择并行执行还是顺序执行这些构建任务。

请注意,Groovy中的Maps(即关联数组)是有序的。因此,如果您在这里使用Maps来实现顺序执行构建任务,它们将按照定义的顺序依次执行。

这将满足您按顺序执行构建任务的需求。

用户回复1:这正是我在寻找的,它完美地工作,而且按照预期的顺序(先进先出)。2. @AlejandroDécimo,根据您之前的评论:请将此答案标记为已接受…

这个解决方案将允许您根据需要在并行和顺序之间切换执行构建任务列表,以满足不同的需求。记得根据您的具体环境和需求进行适当的配置和调整。

正文完