我查看了许多管道示例以及如何在管道脚本中编写post build部分。但从来没有得到我正在寻找的答案。 我有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
'''
}
}
}
我尝试使用' parallel'在帖子部分的选项,但它给了我错误。有没有办法同时建立作业B,C,D,后期成功'部?
提前致谢!
答案 0 :(得分:3)
错误消息很清楚:
使用了无效的“并行”步骤 - 在此上下文中不允许 - 并行步骤只能用作阶段中唯一的顶级步骤 步骤
限制性较强的声明性语法目前不允许在帖子中使用并行。
如果您不想切换到scripted syntax,另一个应该可行的选项:在第二阶段并行构建作业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
)
}
}
}
}
答案 1 :(得分:0)
parallel 关键字实际上可以在 post 条件中工作,只要它封装在脚本块中,因为脚本块只是脚本管道的后备,它允许您在任何地方运行并行执行步骤。< br/> 以下应该可以正常工作:
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
}]
}
}
}
}
}
这只是一个示例,具体的参数或配置(对于 build
关键字)可以根据您的需要添加到每个作业执行中。