前置条件下的Jenkins声明性管道负载参数

前置条件下的Jenkins声明性管道负载参数,jenkins,jenkins-pipeline,jenkins-declarative-pipeline,Jenkins,Jenkins Pipeline,Jenkins Declarative Pipeline,在jenkins声明性管道中,有一种执行前置条件的方法,它应该从文件中加载构建参数。在詹金斯有一个选项,我们可以重新启动个别阶段。因此,我希望每个阶段都从groovy文件加载参数 目前是 pipeline { agent any stage("Grep the values") { steps { load "${WORKSPACE}/file-parameter.groovy&quo

在jenkins声明性管道中,有一种执行前置条件的方法,它应该从文件中加载构建参数。在詹金斯有一个选项,我们可以重新启动个别阶段。因此,我希望每个阶段都从groovy文件加载参数

目前是

pipeline {
    agent any

        stage("Grep the values") {
            steps {
                load "${WORKSPACE}/file-parameter.groovy"
            }
        }


        stage("Perform Deploynment) {
            when {
                expression { "${Perform_Deployment}" == "true" }
            }

            steps {
                withCredentials([
                    usernamePassword(credentialsId: "LoginID", passwordVariable: "LoginPassword", usernameVariable: "LoginUser")
                ]) {
                    ansiblePlaybook (
                        playbook: "${WORKSPACE}/ansible-playbook.yml",
                        forks: 5,
                        extraVars: [
                            loginUser: "${LoginUser}",
                            loginPassword: "${LoginPassword}"
                        ]
                    )
                }
            }
        }
    }
}

如何在when条件之前的阶段中加载“${WORKSPACE}/file parameter.groovy”。我的期望值如下

pipeline {
    agent any

        stage("Grep the values") {
            steps {
                load "${WORKSPACE}/file-parameter.groovy"
            }
        }


        stage("Perform Deploynment) {
            load "${WORKSPACE}/file-parameter.groovy"
            when {

                expression { "${Perform_Deployment}" == "true" }
            }

            steps {
                withCredentials([
                    usernamePassword(credentialsId: "LoginID", passwordVariable: "LoginPassword", usernameVariable: "LoginUser")
                ]) {
                    ansiblePlaybook (
                        playbook: "${WORKSPACE}/ansible-playbook.yml",
                        forks: 5,
                        extraVars: [
                            loginUser: "${LoginUser}",
                            loginPassword: "${LoginPassword}"
                        ]
                    )
                }
            }
        }
    }
}


load
步骤返回groovy脚本执行时返回的任何内容,因此需要将其存储在变量中

文件参数.groovy
可以如下所示:

return [
    performDeployment: true,
    // other variables
]
还是像这样

performDeployment = true

// other variables and methods

return this
在这两种情况下,您都可以在管道中使用它,如下所示:

stage("Grep the values") {
    steps {
        script {
            fileParams = load("${WORKSPACE}/file-parameter.groovy")
        }
    }
}

stage("Perform Deploynment) {
    when {
        expression { fileParams.performDeployment }
    }

我非常确定您不需要进行字符串比较,您可以使用布尔值来代替。

我尝试了这两种方法,但当我重新启动第一阶段时,遇到了错误org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:找不到这样的字段:field java.lang.string performDeployment。如果只需单击build no issue。问题发生在我重新启动stageSomehow fileParams时,在您的案例中它是一个字符串,而不是一个应该是的映射。你试过把它打印到控制台上吗?但你说当你正常启动它时它起作用了?是的,对。该问题仅在重新启动阶段发生。在声明性管道中,我们可以重新启动单个阶段。例如,如果我们在jenkins中重新启动Perform Deployment,则会发生问题您是否尝试添加打印语句?fileParams似乎是错误的类型,我想知道确切的内容是什么。你能打印出这个变量并重现错误吗?