Jenkins Parallel Build 读入一个空映射,但它保存了前一阶段的数据

Jenkins Parallel Build reads in an empty map, but it held data in a previous stage

试图使并行构建更加动态的新手。

使用这个声明性脚本 而不是阅读预先填充的地图 def jobs = ["JobA", "JobB", "JobC"],效果很好。

我正在尝试从一个全局地图变量 JOBS = [] 中读取,我使用 JOBS.add("JobAAA") 语法在一个阶段中填充它。

在管道阶段打印出 JOBS 显示里面有内容,

JOBS map is [JobAAA, JobBBB, JobCCC]

但是当我使用它生成并行构建时它似乎变空了并且我收到错误消息

No branches to run

我知道我一定在某个地方混淆了我的理解,但是谁能给我指出正确的方向。

这是我正在使用的代码

def jobs = ["JobA", "JobB", "JobC"]
JOBS_MAP = []

def parallelStagesMap = jobs.collectEntries() {
   ["${it}" : generateStage(it)]
}

def parallelStagesMapJOBS = JOBS_MAP.collectEntries(){
   ["${it}" : generateStage(it)]
}

def generateStage(job) {
   return {
       stage("Build: ${job}") {
           echo "This is ${job}."
       }
   }
}

pipeline {
   agent any

   stages {
       stage('populate JOBS map') {
           steps {
               script {
                   JOBS_MAP.add("JobAAA")
                   JOBS_MAP.add("JobBBB")
                   JOBS_MAP.add("JobCCC")
               }
           }
       }
       stage('print out JOBS map'){
           steps {
               echo "JOBS_MAP map is ${JOBS_MAP}"
           }
       }
       stage('parallel job stage') {
           steps {
               script {
                   parallel parallelStagesMap
               }
           }
       }
       stage('parallel JOBS stage') {
           steps {
               script {
                   parallel parallelStagesMapJOBS
               }
           }
       }
   }
}

试试这个:

def jobs = ["JobA", "JobB", "JobC"]
JOBS_MAP = []

def generateStage(job) {
   return {
       stage("Build: ${job}") {
           echo "This is ${job}."
       }
   }
}

pipeline {
   agent any

   stages {
       stage('populate JOBS map') {
           steps {
               script {
                   JOBS_MAP.add("JobAAA")
                   JOBS_MAP.add("JobBBB")
                   JOBS_MAP.add("JobCCC")
               }
           }
       }
       stage('print out JOBS map'){
           steps {
               echo "JOBS_MAP map is ${JOBS_MAP}"
           }
       }
       stage('parallel job stage') {
           steps {
               script {
                   def parallelStagesMap = jobs.collectEntries() {
                       ["${it}" : generateStage(it)]
                   }
                   parallel parallelStagesMap
               }
           }
       }
       stage('parallel JOBS stage') {
           steps {
               script {
                   def parallelStagesMapJOBS = JOBS_MAP.collectEntries(){
                      ["${it}" : generateStage(it)]
                   }

                   parallel parallelStagesMapJOBS
               }
           }
       }
   }
}