我可以检查 Jenkinsfile 中是否存在环境变量吗
Can I check if Environment variable exist or not in Jenkinsfile
我是 运行 我的项目的多分支管道。
Jenkinsfile 的行为应该根据触发器而改变。
有两个事件触发管道 1.推送事件 2.拉取请求。
我正在尝试检查环境变量 'CHANGE_ID'('CHANGE_ID' 仅可用于合并请求)。Reference .
因此,如果管道由 Push 事件触发,并且如果检查 'CHANGE_ID' 变量,它会抛出异常(如果管道由 Pull Request 触发,代码工作正常)。
代码:
stage('groovyTest'){
node('mynode1') {
if (CHANGE_ID!=NULL){
echo "This is Pull request"
}else{
echo "This is Push request"
}
}
}
错误:
groovy.lang.MissingPropertyException: No such property: CHANGE_ID for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224)
at org.kohsuke.groovy.sandbox.impl.Checker.call(Checker.java:241)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:221)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:221)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:28)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at WorkflowScript.run(WorkflowScript:5)
at ___cps.transform___(Native Method)
如何检查 Jenkinsfile 中是否存在 'CHANGE_ID' 变量?
您可以在使用前检查它:
if (env.CHANGE_ID) {
...
来自doc
Environment variables accessible from Scripted Pipeline, for example: env.PATH
or env.BUILD_ID
. Consult the built-in Global Variable Reference for a complete, and up to date, list of environment variables available in Pipeline.
这是声明式管道的样子:
pipeline {
// ...
stages {
// ...
stage('Build') {
when {
allOf {
expression { env.CHANGE_ID != null }
expression { env.CHANGE_TARGET != null }
}
}
steps {
echo "Building PR #${env.CHANGE_ID}"
}
}
}
}
仅当不建立PR时才运行一个阶段:
when { expression { env.CHANGE_ID == null } }
您还可以在 when 子句中使用 changeRequest()
函数来检查 PR:
when {
anyOf {
changeRequest() // if pull request
branch 'master'
branch 'release/*'
}
}
我是 运行 我的项目的多分支管道。
Jenkinsfile 的行为应该根据触发器而改变。 有两个事件触发管道 1.推送事件 2.拉取请求。
我正在尝试检查环境变量 'CHANGE_ID'('CHANGE_ID' 仅可用于合并请求)。Reference .
因此,如果管道由 Push 事件触发,并且如果检查 'CHANGE_ID' 变量,它会抛出异常(如果管道由 Pull Request 触发,代码工作正常)。
代码:
stage('groovyTest'){
node('mynode1') {
if (CHANGE_ID!=NULL){
echo "This is Pull request"
}else{
echo "This is Push request"
}
}
}
错误:
groovy.lang.MissingPropertyException: No such property: CHANGE_ID for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224)
at org.kohsuke.groovy.sandbox.impl.Checker.call(Checker.java:241)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:221)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:221)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:28)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
at WorkflowScript.run(WorkflowScript:5)
at ___cps.transform___(Native Method)
如何检查 Jenkinsfile 中是否存在 'CHANGE_ID' 变量?
您可以在使用前检查它:
if (env.CHANGE_ID) {
...
来自doc
Environment variables accessible from Scripted Pipeline, for example:
env.PATH
orenv.BUILD_ID
. Consult the built-in Global Variable Reference for a complete, and up to date, list of environment variables available in Pipeline.
这是声明式管道的样子:
pipeline {
// ...
stages {
// ...
stage('Build') {
when {
allOf {
expression { env.CHANGE_ID != null }
expression { env.CHANGE_TARGET != null }
}
}
steps {
echo "Building PR #${env.CHANGE_ID}"
}
}
}
}
仅当不建立PR时才运行一个阶段:
when { expression { env.CHANGE_ID == null } }
您还可以在 when 子句中使用 changeRequest()
函数来检查 PR:
when {
anyOf {
changeRequest() // if pull request
branch 'master'
branch 'release/*'
}
}