请注意:这个问题是基于旧的,现在称为"脚本"管道格式。当使用"声明性管道"时,并行块可以嵌套在阶段块内(参见Parallel stages with Declarative Pipeline 1.2)。
我想知道如何将并行步骤与Jenkins工作流/管道插件一起使用,尤其是。如何将它们与构建阶段混合。我知道一般模式:
parallel(firstTask: {
// Do some stuff
}, secondTask: {
// Do some other stuff in parallel
})
但是,我想并行运行几个阶段(在同一节点上,有多个执行程序),所以我尝试添加这样的阶段:
stage 'A'
// Do some preparation stuff
parallel(firstTask: {
stage 'B1'
// Do some stuff
}, secondTask: {
stage 'B2'
// Do some other stuff in parallel
})
stage 'C'
// Finalizing stuff
这不能按预期工作。 "做东西"任务是并行执行的,但并行阶段会立即结束,并且不会包含它们应包含的内容。因此,舞台视图不会显示正确的结果,也不会链接日志。
我可以并行构建不同的阶段,或者是" parallel"步骤只是意味着在一个阶段使用?
答案 0 :(得分:47)
您不得将已弃用的非块范围stage
(如原始问题中)放在parallel
内。
从JENKINS-26107开始,stage
采用块参数。您可以将parallel
置于stage
或stage
内置于parallel
或stage
置于stage
内等。但无法保证构建的可视化支持所有筑巢;特别是
stage
嵌套。parallel
分支,但目前不再有。{/ li>
JENKINS-27394,如果已实施,则会显示任意嵌套的stage
。
答案 1 :(得分:14)
现在不推荐使用该语法,您将收到此错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 14: Expected a stage @ line 14, column 9.
parallel firstTask: {
^
WorkflowScript: 14: Stage does not have a name @ line 14, column 9.
parallel secondTask: {
^
2 errors
您应该执行以下操作:
stage("Parallel") {
steps {
parallel (
"firstTask" : {
//do some stuff
},
"secondTask" : {
// Do some other stuff in parallel
}
)
}
}
只是在这里添加节点的使用,在多个构建服务器/ VM之间分配作业:
pipeline {
stages {
stage("Work 1"){
steps{
parallel ( "Build common Library":
{
node('<Label>'){
/// your stuff
}
},
"Build Utilities" : {
node('<Label>'){
/// your stuff
}
}
)
}
}
所有虚拟机都应标记为用作池。
答案 2 :(得分:7)
我刚刚测试了以下管道,它可以正常工作
self.tableView.tableHeaderView = headerView;
这个职位名为&quot;触发 - 测试&#39;接受一个名为&#39; Environment&#39;
的参数Job&#39; test1&#39;和&#39; test2&#39;是简单的工作:
&#39; test1&#39;
的示例执行时,我能够看到两个阶段同时运行
答案 3 :(得分:2)
我认为现在已经正式实施: Simple Guide to the SWIFT MT101 Format
答案 4 :(得分:1)
正如@Quartz所提到的,你可以做类似
的事情stage('Tests') {
parallel(
'Unit Tests': {
container('node') {
sh("npm test --cat=unit")
}
},
'API Tests': {
container('node') {
sh("npm test --cat=acceptance")
}
}
)
}