【问题标题】:Jenkins declarative pipeline load parameters in pre conditionJenkins声明性管道负载参数在前提条件下
【发布时间】:2020-09-26 12:49:35
【问题描述】:

在 jenkins 声明式管道中,有一种方法可以执行前置条件,它应该从文件中加载构建参数。在 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}"
                        ]
                    )
                }
            }
        }
    }
}

如何在条件之前在阶段加载“${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}"
                        ]
                    )
                }
            }
        }
    }
}

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-declarative-pipeline


    【解决方案1】:

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

    file-parameter.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: No such field found: field java.lang.String performDeployment。如果只是单击构建没有问题。当我重新启动阶段时发生问题
    • 不知何故 fileParams 在你的情况下是一个字符串,而不是应该是一个地图。您是否尝试将其打印到控制台?但是你说正常启动就可以了?
    • 是的,没错。该问题仅在重新启动阶段发生。在声明式管道中,我们可以重新启动各个阶段。例如,如果我们在 jenkins 中重新启动执行部署,就会出现问题
    • 您是否尝试添加打印语句? fileParams 似乎是错误的类型,我想知道确切的内容是什么。你能打印出变量并重现错误吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2022-01-16
    • 2022-08-05
    • 1970-01-01
    • 2019-05-20
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多