我正在为我的项目运行多分支管道。
Jenkinsfile的行为应该根据触发器而改变。有两个事件触发管道1.推送事件2.拉取请求。
我正在尝试检查环境变量'CHANGE_ID'('CHANGE_ID'仅适用于合并请求)。参考。
因此,如果pipeline由Push事件触发,并且如果检查'CHANGE_ID'变量,则会抛出异常(如果pipeline由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$4.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)
我如何检查'CHANGE_ID'变量是否存在于Jenkinsfile中?
4条答案
按热度按时间myzjeezk1#
在使用之前,您可以检查它:
医生给的
可从Scripted Pipeline访问的环境变量,例如:
env.PATH
或env.BUILD_ID
。请参阅内置的全局变量参考,以获得完整的最新环境变量列表。wvyml7n52#
下面是声明式管道的样子:
要仅在 * 不 * 构建PR时运行阶段,请执行以下操作:
r6hnlfcb3#
您也可以在when子句中使用
changeRequest()
函数来检查PR:jgzswidk4#
一些需要提前知道(或至少猜测)的事情:
env
对象(?)来管理当前环境变量-这意味着不能保证任何env
成员也会出现在“绑定”系统中env.<name>
和<name>
同时存在env.<name>
的不存在的成员将导致空,而对于相同的情况,访问<name>
将引发故障。因此,我建议实现看起来像这样的代码: