我正在尝试创建一个声明性管道,它可以并行执行多个(可通过参数配置)作业,但我遇到了并行部分的问题。
基本上,由于某种原因,下面的管道会产生错误
Nothing to execute within stage "Testing" @ line .., column ..
我无法弄清楚为什么或如何解决它。
import groovy.transform.Field
@Field def mayFinish = false
def getJob() {
return {
lock("finiteResource") {
waitUntil {
script {
mayFinish
}
}
}
}
}
def getFinalJob() {
return {
waitUntil {
script {
try {
echo "Start Job"
sleep 3 // Replace with something that might fail.
echo "Finished running"
mayFinish = true
true
} catch (Exception e) {
echo e.toString()
echo "Failed :("
}
}
}
}
}
def getJobs(def NUM_JOBS) {
def jobs = [:]
for (int i = 0; i < (NUM_JOBS as Integer); i++) {
jobs["job{i}"] = getJob()
}
jobs["finalJob"] = getFinalJob()
return jobs
}
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr:'5'))
}
parameters {
string(
name: "NUM_JOBS",
description: "Set how many jobs to run in parallel"
)
}
stages {
stage('Setup') {
steps {
echo "Setting it up..."
}
}
stage('Testing') {
steps {
parallel getJobs(params.NUM_JOBS)
}
}
}
}
我在旧的管道中看到了很多这样做的例子,但没有声明。 谁知道我做错了什么?
答案 0 :(得分:2)
目前,在使用声明性管道时,似乎无法动态提供parallel
分支。
即使您前面有stage
,在script
块中,您调用getJobs()
并将其添加到绑定中,也会抛出相同的错误消息。
在这种情况下,您必须回退使用脚本管道。