如何在 Jenkinsfile 声明管道中动态更改阶段名称?

How make dynamic change stage name in Jenkinsfile Declarative pipeline?

我有 Jenkinsfile(脚本化管道)

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 Job 后停止并 return 错误

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)

return也出错了。

如何解决这个问题?

您可以使用顺序阶段创建动态阶段,如下所示:

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