我有一个简单的并行管道(请参阅代码),该管道与Jenkins 2.89.2一起使用。另外,我使用参数,现在希望能够通过在作业执行之前提供参数来自动增加/减少deployVM A..Z阶段的数量。
如何通过提供参数动态构建管道?
我想要的伪代码-动态生成:
pipeline { agent any parameters { string(name: 'countTotal', defaultValue: '3') } stages { stage('deployVM') { def list = [:] for(int i = 0; i < countTotal.toInteger; i++) { list += stage("deployVM ${i}") { steps { script { sh "echo p1; sleep 12s; echo phase${i}" } } } } failFast true parallel list } } }
到目前为止,我拥有的代码-可以并行执行,但是是静态的:
pipeline { agent any stages { stage('deployVM') { failFast true parallel { stage('deployVM A') { steps { script { sh "echo p1; sleep 12s; echo phase1" } } } stage('deployVM B') { steps { script { sh "echo p1; sleep 20s; echo phase2" } } } } } } }
尽管该问题假定使用声明性管道,但我建议使用脚本化管道,因为它更加灵活。 您的任务可以通过这种方式完成
properties([ parameters([ string(name: 'countTotal', defaultValue: '3') ]) ]) def stages = [failFast: true] for (int i = 0; i < params.countTotal.toInteger(); i++) { def vmNumber = i //alias the loop variable to refer it in the closure stages["deployVM ${vmNumber}"] = { stage("deployVM ${vmNumber}") { sh "echo p1; sleep 12s; echo phase${vmNumber}" } } } node() { parallel stages }
还要看一看片段生成器,它使您可以生成一些脚本化的管道代码。