Mai*_*nak 6 jenkins devops jenkins-pipeline jenkins-declarative-pipeline
我正在尝试构建一个结合了并行和顺序阶段的 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"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
现在我想从构建参数中读取值并循环阶段。这是我尝试过但无法使其发挥作用的方法。这段代码摘自几个月前我在 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
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
声明式和脚本化管道语法不会在管道中混合,请参阅管道语法。由于您是根据参数动态创建管道定义,因此您很可能应该完全使用脚本语法,除非您的用例匹配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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6096 次 |
| 最近记录: |