如何在Jenkinsfile声明式流水线中动态更改阶段名称?

4

我有一个Jenkinsfile (Scripted Pipeline)

def template1 = "spread_sshkeys"

node {
    // Clean before build
    stage('Checkout') {
        deleteDir()
        checkout scm
        sh "git submodule foreach --recursive git pull origin master";
    }
    stage("import template ${template1}") {
            script{
                sh "ls -las; cd jenkins-ci-examples; ls -las";
                jenkins_ci_examples.sub_module = load "jenkins-ci-examples/${template1}"
            }
    }
    stage("run template ${template1}") {
sh "echo ${jenkins_ci_examples.sub_module}";
    }
}

想要转向声明式编程

def template1 = "spread_sshkeys"

pipeline {
    agent any

    stages {
        stage ("Checkout") {
            steps {
                deleteDir()
                checkout scm
                sh "git submodule foreach --recursive git pull origin master"
            }
        }
        stage("import template ${template1}") {
            steps {
                    script {
                        sh "ls -las; cd jenkins-ci-examples; ls -las";
jenkins_ci_examples.sub_module = load "jenkins-ci-examples/${template1}"
                    }
            }
        }
        stage("run template ${template1}") {
            steps {
                sh "echo ${jenkins_ci_examples.sub_module}";
            }
        }

    }
}

启动Jenkins作业后停止并返回错误

WorkflowScript: 22: Expected string literal @ line 22, column 19.
               stage("import template ${template1}") {
                     ^

WorkflowScript: 30: Expected string literal @ line 30, column 19.
               stage("run template ${template1}") {
                     ^

尝试使用

stage('run template ${template1}')

还有其他

stage('run template '+template1)

也返回了错误。

如何解决这个问题?


错误信息暗示你不能这样做。 - Matt Schuchard
1个回答

6

您可以使用以下步骤创建动态阶段:

def template1 ="spread_sshkeys"
pipeline {
    agent any

    stages {
        stage('Dynamic Stages') {
            
            steps {
                script {
                        stage("import template ${template1}"){
                            println("${env.STAGE_NAME}")
                        }
                         stage("run template ${template1}"){
                            println("${env.STAGE_NAME}")
                        }
                }
            }
        }
        
    }
}

enter image description here


@Nikolay Baranenko 这个对你有用吗? - Altaf
阶段('动态阶段') - 解决方案上下文阶段可能为空? - Nikolay Baranenko
1
可以,但在显示时会显示“错误”而不是“动态阶段”。 - Altaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接