Hello, it would be great if we had a mechanism to define dynamic stages within declarative pipelines. The use case is that I want to create a pipeline function for micro service repositories. Each repository contains a number of container images that needs to be built in parallel. The only way I found is using the these pseudo stages wrapped by the `parallel` step:
pipeline {
agent any
stages {
stage('build') {
steps {
runParallel items: ("a".."f").collect { "Stage ${it}" }
}
}
}
}
def runParallel(args) {
parallel args.items.collectEntries { name -> [ "${name}": {
stage("${name}") {
echo name
}
}]}
}
This is bad because the sub-stages can neither have an agent nor contain other sub-stages. And it requires a On the other hand, this shouldn't make the declarative pipeline too scripty. A minimal scriptiness approach would look like this:
pipeline {
agent none
stages {
stage('build') {
stages {
("A".."F").collect {
stage("Stage ${it}") {
agent any
steps {
echo "Hello from stage ${it}!"
}
}
}
}
}
}
}
|