cad*_*eha 6 groovy jenkins jenkins-pipeline
我查看了许多管道示例以及如何在管道脚本中编写后期构建部分。但一直没有得到我想要的答案。我有 4 个作业 - 比如说作业 A、B、C 和 D。我希望作业 A 首先运行,如果成功,它应该并行触发作业 B、C、D。如果作业 A 失败,它应该只触发作业 B。如下所示:
pipeline {
agent any
stages {
stage('Build_1') {
steps {
sh '''
Build Job A
'''
}
}
post {
failure {
sh '''
Build Job B
'''
}
success {
sh '''
Build Job B,C,D in parallel
'''
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在帖子部分使用“并行”选项,但它给了我错误。有没有办法在帖子“成功”部分并行构建作业 B、C、D?
提前致谢!
只要将并行关键字封装在脚本块内,并行关键字实际上就可以在后置条件内工作,因为脚本块只是脚本化管道的后备,这将允许您在任何需要的地方运行并行执行步骤。
以下应该可以正常工作:
pipeline {
agent any
stages {
stage('Build_1') {
steps {
// Build Job A
}
}
}
post {
failure {
// run job B
build job: 'Job-B'
}
success {
script {
// run jobs B, C, D in parallel
def jobs = ['Job-B', 'Job-C', 'Job-D']
parallel jobs.collectEntries { job ->
["Building ${job}" : {
build job: job
}]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个示例,build可以根据您的需要将特定参数或配置(针对关键字)添加到每个作业执行中。
错误消息对此非常清楚:
使用了无效的“并行”步骤 - 在此上下文中不允许 - 并行步骤只能用作阶段步骤中唯一的顶级步骤
目前,更具限制性的声明性语法不允许在帖子部分使用并行。
如果您不想切换到脚本语法,另一个可行的选项是:在第二阶段并行构建作业 B、C、D,并将失败条件移至第一阶段的后期部分。因此,如果 A 成功,作业 B、C、D 将运行。如果 A 不成功,则仅运行作业 B。
pipeline {
agent any
stages {
stage('one') {
steps {
// run job A
}
post {
failure {
// run job B
}
}
}
stage('two') {
steps {
parallel(
// run job B, C, D
)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2519 次 |
| 最近记录: |