Jenkins Pipeline检查参数化构建是否真的参数化

时间:2018-08-10 10:14:24

标签: jenkins jenkins-pipeline

当前,我正在使用Jenkins管道和参数化构建。

我知道我可以开始一个管道阶段,在该阶段可以检查给定的参数是否为空,但是还有另一种方法可以检查参数化的版本是否真的被参数化了吗?

像我上台阶之前要走一步吗? 在进入阶段之前,我们可以检查一些条件的阶段。

2 个答案:

答案 0 :(得分:0)

在声明性管道中,无法在“之前”执行任何操作。如果某些参数未通过验证,则您可以运行另一个触发“作业”的作业或尝试类似的操作,否则整个作业将被中止。但是您可以在script块中进行控制。

def ex(param){
    currentBuild.result = 'ABORTED'
    error('BAD PARAM: ' + param)
}

pipeline {
    agent any

    parameters {
        choice(name: 'a', choices:"NO\nOK\nMaybe", description: "Tests?" )
        choice(name: 'b', choices:"NO\nOK\nMaybe", description: "Tests?" )
        choice(name: 'c', choices:"NO\nOK\nMaybe", description: "Tests?" )
        choice(name: 'd', choices:"NO\nOK\nMaybe", description: "Tests?" )
    }   

    stages { 
        stage("check params") {
            steps {
                script {
                    //make some crazy validation
                    if ("${params.a}" != "OK") {ex("a")}
                    if ("${params.b}" != "OK") {ex("b")}
                    if ("${params.c}" != "OK") {ex("c")}
                    if ("${params.d}" != "OK") {ex("d")}
                }
            }
        }
        stage("Next stage") {
            steps {
                echo "Run"
            }
        }
    }
}

答案 1 :(得分:0)

还可以使用params.each来检查是否有任何参数“选择”是null或空字符串""或不是,该值应类似于“ OK”等。

当参数是从另一个作业传递的,并且使用的变量或方法碰巧没有可接受的值时有用:

build job: "some-jobname",
        parameters: [
                [$class: 'StringParameterValue', name: 'a', value: thisMethodReturnsOK()],
                [$class: 'StringParameterValue', name: 'b', value: oopsThisMethodReturnsEmptySTRING()],
                [$class: 'StringParameterValue', name: 'c', value: oopsThisMethodReturnsNULL()],
                [$class: 'StringParameterValue', name: 'd', value: oopsThisVariableContainsUnacceptableVALUE],
                           ]

此修改后的版本将验证每个可用的构建参数,如果参数为ABORT,则会引起BAD

# Job: "some-jobname"

def ex(param){
    currentBuild.result = 'ABORTED'
    error('BAD PARAM: ' + param)
}

pipeline {
    agent any

    testA = param.a
    testB = param.b
    testC = param.c
    testD = param.d

    stages { 
        stage("check params") {
            steps {
                script {
                    params.each {
                        if (it == null || it == "" || it != "OK")
                            ex(it)
                    }
                }
            }
        }
        stage("Next stage") {
            steps {
                echo "Run and use parameters passed to TestA etc..."
            }
        }
    }
}