那么有条件地并行运行Jenkins管道吗?所以我有一个完整的版本,可以并行运行所有阶段,但是让我说我只想运行2/5的阶段...这可能,有没有人知道这个语法会是什么样子?这是我的groovy脚本:
def call() {
def my_automation = load("my-lib/groovies/my_automation.groovy")
parallel thing1: {
stage('thing1'){
my_automation.my_func("thing1")
}},
thing2: {
stage('thing2'){
my_automation.my_func("thing2")
}}, thing3: {
stage('thing3'){
my_automation.my_func("thing3")
}}, thing4: {
stage('thing4'){
my_automation.my_func("thing4")
}}, thing5: {
stage('thing5'){
my_automation.my_func("thing5")
}}, thing6: {
stage('thing6'){
my_automation.my_func("thing6")
}}, thing7: {
stage('thing7') {
my_automation.my_func("thing7")
}
}
}return this;
但是寻找这样的事情:
for(all things defined, run them at once in parallel)
{
etc...
}
这可能吗?
答案 0 :(得分:0)
您需要做的是有条件地定义要传递给并行的内容,而不是有条件地处理它。您可以使用for循环构建要在地图中执行的事物的地图,然后将其传递到并行步骤:
def branches = [:]
for (int i = 0; i < 4 ; i++) {
int index = i
branches["thing${index}"] = {
stage("thing${index}") {
node ('label_example'){
my_automation.my_func("thing${index}")
}
}
}
}
parallel branches
如果需要,可以使用其中的逻辑跳过向地图添加内容。这不是语法检查或测试,但你应该明白这个想法。
答案 1 :(得分:0)
我最终做了类似这样的事情,我将传递图像名称并匹配它,这将决定哪一个反对(花了足够长的时间来响应,但想到这可能会帮助将来的某个人):
String call(String image_name) {
def map = ["CentOS-7":"rpm", "CentOS-6":"rpm", "RHEL-7":"rpm","RHEL-6":"rpm","Ubuntu-14.04":"deb"]
for (element in map) {
echo "${element.key} ${element.value}"
if ("${element.key}" == image_name){
return "${element.value}"}
}
return "notfound"
}
return this;