ami*_*ami 43 jenkins jenkins-pipeline
请注意:问题基于旧的,现在称为"脚本"管道格式.使用"声明性管道"时,并行块可以嵌套在阶段块内(请参阅带有声明性管道1.2的并行阶段).
我想知道如何将并行步骤与Jenkins工作流/管道插件一起使用,尤其是.如何将它们与构建阶段混合.我知道一般模式:
parallel(firstTask: {
// Do some stuff
}, secondTask: {
// Do some other stuff in parallel
})
Run Code Online (Sandbox Code Playgroud)
但是,我想并行运行几个阶段(在同一节点上,有多个执行程序),所以我尝试添加这样的阶段:
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
Run Code Online (Sandbox Code Playgroud)
这不能按预期工作."do stuff"任务是并行执行的,但并行阶段会立即结束,并且不会包含它们应包含的内容.因此,舞台视图不会显示正确的结果,也不会链接日志.
我可以并行构建不同的阶段,还是"并行"步骤仅用于单个阶段?
Jes*_*ick 51
您可能不会将已弃用的非块范围stage(如原始问题中)放在里面parallel.
从JENKINS-26107开始,stage采用块参数.您可以放置parallel在内部stage,stage内部parallel或stage内部stage等.但是不能保证构建的可视化支持所有嵌套; 特别是
stage嵌套.parallel顶级舞台内的分支,但目前不再有.JENKINS-27394,如果实现,将显示任意嵌套的stages.
PRF*_*PRF 15
现在不推荐使用该语法,您将收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
你应该做的事情如下:
stage("Parallel") {
steps {
parallel (
"firstTask" : {
//do some stuff
},
"secondTask" : {
// Do some other stuff in parallel
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
只是在这里添加节点的使用,在多个构建服务器/ VM之间分配作业:
pipeline {
stages {
stage("Work 1"){
steps{
parallel ( "Build common Library":
{
node('<Label>'){
/// your stuff
}
},
"Build Utilities" : {
node('<Label>'){
/// your stuff
}
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
应将所有VM标记为用作池.
我刚刚测试了以下管道,它的工作原理
parallel firstBranch: {
stage ('Starting Test')
{
build job: 'test1', parameters: [string(name: 'Environment', value: "$env.Environment")]
}
}, secondBranch: {
stage ('Starting Test2')
{
build job: 'test2', parameters: [string(name: 'Environment', value: "$env.Environment")]
}
}
Run Code Online (Sandbox Code Playgroud)
这个名为'trigger-test'的Job接受一个名为'Environment'的参数
Job'test1'和'test2'是简单的工作:
'test1'的示例
在执行时,我能够看到两个阶段同时运行
正如@Quartz 提到的,你可以做类似的事情
stage('Tests') {
parallel(
'Unit Tests': {
container('node') {
sh("npm test --cat=unit")
}
},
'API Tests': {
container('node') {
sh("npm test --cat=acceptance")
}
}
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100031 次 |
| 最近记录: |