gpt4 book ai didi

jenkins - 如何使用动态数据在 Jenkins 管道中构建并行和顺序阶段的组合

转载 作者:行者123 更新时间:2023-12-04 03:55:25 25 4
gpt4 key购买 nike

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

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"
}
}
}

}
}
}
给我以下执行结果
enter image description here
现在我想从我的构建参数中读取值,然后循环阶段。这是我尝试过但无法正常工作的方法。这段代码摘自我几个月前在 SO 中发现的另一个答案,但现在无法追踪,否则会添加链接 -
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
}
}
}
}
}

最佳答案

声明式和脚本式流水线语法不混合在流水线中,见 Pipeline Syntax .由于您正在根据参数动态创建管道定义,因此您很可能应该完全使用脚本语法,除非您的用例匹配 matrix .
从您的管道定义中删除声明性语法将给出如下所示的内容。请注意,我没有在实时 Jenkins 实例上对其进行测试。

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
}

关于jenkins - 如何使用动态数据在 Jenkins 管道中构建并行和顺序阶段的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63985838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com