首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在具有动态数据的Jenkins流水线中构建并行和顺序级的组合

如何在具有动态数据的Jenkins流水线中构建并行和顺序级的组合
EN

Stack Overflow用户
提问于 2020-09-21 11:31:14
回答 1查看 1.9K关注 0票数 3

我正在尝试构建一个Jenkins管道,它具有并行和顺序阶段的组合。我可以用静态数据完成同样的工作,但在使用动态数据时,即使用参数化构建和从构建参数中读取数据时,无法使其工作。

下面的代码段工作正常

代码语言:javascript
运行
复制
pipeline {
agent any
stages {
    stage('Parallel Tests') {
        parallel {
            stage('Ordered Tests Set') {
                stages {
                    stage('Building seq test 1') {
                        steps {
                             echo "build seq test 1"
                            }
                    }
                    stage('Building seq test 2') {
                        steps {
                               echo "build seq test 2"
                        }
                    }
                    
                }
            }

            stage('Building Parallel test 1') {
                steps {
                    echo "Building Parallel test 1"
                }
            }
            stage('Building Parallel test 2') {
                steps {
                   echo "Building Parallel test 2"
                }
            }   
        }

    }
}

}

给出了下面的执行结果

现在我想从我的构建参数中读取值,然后循环stages。这就是我尝试过的,但不能让它工作。这一小段摘自我几个月前找到的另一个答案,但现在无法追踪,否则就会添加链接-

代码语言:javascript
运行
复制
def parallelStagesMap = params['Parallel Job Set'].split(',').collectEntries {
    ["${it}" : generateStage(it)]
}

def orderedStagesMap = params['Ordered Job Set'].split(',').collectEntries {
    ["${it}" : generateStage(it)]
}

def orderedMap (){
    def orderedStagesMapList= [:]
    orderedStagesMapList['Ordered Tests Set']= {
        stage('Ordered Tests Set') {
            stages{
                orderedStagesMap
            }        
        }
    }
    return orderedStagesMapList;
}

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

pipeline {
    agent none
    stages {
        stage ("Parallel Stage to trigger Tests"){
            steps {
                script {
                    parallel orderedMap()+parallelStagesMap
                }
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 09:34:14

声明性和脚本化管道语法不能在管道中混合,请参阅Pipeline Syntax。因为您是基于参数动态创建管道定义的,所以除非您的用例与matrix匹配,否则您最有可能完全使用脚本语法。

从您的Pipeline定义中删除声明性语法会得到类似下面的结果。请注意,我没有在活动的Jenkins实例上对其进行测试。

代码语言:javascript
运行
复制
def parallelStagesMap = params['Parallel Job Set'].split(',').collectEntries {
    ["${it}" : generateStage(it)]
}

def orderedStagesMap = params['Ordered Job Set'].split(',').collectEntries {
    ["${it}" : generateStage(it)]
}

def orderedMap (){
    def orderedStagesMapList= [:]
    orderedStagesMapList['Ordered Tests Set']= {
        stage('Ordered Tests Set') {
            orderedStagesMap.each { key, value ->
                value.call()
            }
        }
    }
    return orderedStagesMapList;
}

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

stage("Parallel Stage to trigger Tests") {
    parallel orderedMap()+parallelStagesMap
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63985838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档