Jenkins Pipeline任务执行顺序及JOB重复执行问题咨询
Jenkins Pipeline 问题解答
问题一:Pipeline内任务的执行顺序是否遵循脚本编写顺序?
- 若Pipeline采用顺序执行的
stages结构,任务会严格按照脚本中stage的编写顺序依次运行,前一个stage执行完成后才会启动下一个。 - 但如果使用
parallel块包裹多个stage,这些被包裹的stage会同时启动并行执行,它们的完成顺序不遵循脚本编写顺序,完全取决于每个任务自身的执行耗时,无法保证先后。
问题二:JOB1连续执行两次的原因
从你提供的Pipeline代码来看,问题出在parallel块内部:你定义了两个独立的stage('JOB1'),每个stage里都调用了callJobByName("JOB1")触发JOB1。由于parallel块会同时启动内部所有stage,这两个stage会并行触发JOB1,最终导致JOB1被执行两次。
如果你需要JOB1在Pipeline开始和中间阶段执行,应该调整结构,把JOB1的执行放在顺序的stage中,而非同一个parallel块内,示例如下:
pipeline { agent any; options { timeout(time: 4, unit: 'HOURS') } stages { stage('Start with JOB1') { steps { callJobByName("JOB1") } } stage('Parallel tests') { parallel { stage('JOB2') { steps { callJobByName("JOB2") } } stage('JOB3') { steps { callJobByName("JOB3") } } } } stage('Middle stage JOB1') { steps { callJobByName("JOB1") } } } }
这样JOB1会在Pipeline开始时执行一次,等并行的JOB2、JOB3完成后,再执行第二次,符合你“开始和中间阶段执行”的需求。
内容的提问来源于stack exchange,提问作者Silviu Sabău
相关产品推荐
相关产品推荐

