我认为我在这里做了一些非正统的事情,但是为了方便起见,我想坚持声明性的**,同时**动态地生成并行步骤。
我找到了一种方法来做类似的事情,但是mixing both paradigms,它似乎不能很好地与BlueOcean UI一起工作(每个并行分支内的多个阶段不能正确显示)。
我最接近的是这样的东西:
def accounts() {
return ["dynamic", "list"]
}
def parallelJobs() {
jobs = []
for (account in accounts()) {
jobs[] = stage(account) {
steps {
echo "Step for $account"
}
}
}
return jobs
}
# this is inside a shared library, called by my Jenkinsfile, like what is described
# under "Defining Declarative Pipelines in Shared Libraries" in
# https://www.jenkins.io/blog/2017/09/25/declarative-1/
def call() {
pipeline {
stages {
stage('Build all variations') {
parallel parallelJobs()
}
}
}
}
问题是Jenkins犯了这样的错误:
Expected a block for parallel @ line X, column Y.
parallel parallelJobs()
^
因此,我想知道是否有一种方法可以将parallelJobs()
返回的阶段列表转换为Jenkins所期望的块...
1条答案
按热度按时间whlutmcx1#
是的,你可以。你需要返回一个
map
的阶段。下面是一个有效的管道示例。