我试图找到一种方法,根据环境(开发、测试、生产)为 Jenkins 文件中的触发器块选择 cron 表达式
我在 Stack Overflow 上找到了这个:触发器指令上的 Jenkins 管道中的条件
勾选的解决方案帮助我制定了如何设置我自己的代码。然而,每当我运行我创建的代码时,我都会收到以下错误:
hudson.remoting.ProxyException: java.lang.NullPointerException: Cannot invoke "String.split(String)" because "format" is null
at hudson.scheduler.CronTabList.create(CronTabList.java:111)
at hudson.scheduler.CronTabList.create(CronTabList.java:99)
at hudson.triggers.Trigger.<init>(Trigger.java:179)
at hudson.triggers.TimerTrigger.<init>(TimerTrigger.java:57)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
这是我在 Jenkins 管道脚本框中本地使用的代码:
pipeline {
agent any
triggers{
cron( cronExpression = getCronParams() )
}
...
我的管道块下方的相关函数是:
def getCronParams() {
withFolderProperties {
echo "Environment is ${env.ENVIRONMENT}"
switch ("${env.ENVIRONMENT}") {
case 'Development':
echo "Applying Development Area Configuration..."
return "@midnight"
case 'Production':
echo "Applying Production Configuration..."
return "@midnight"
default:
echo "Unknown Environment, unable to handle Environment appropriately, will exit here..."
break
}
}
}
注意:我使用 Jenkins 插件文件夹属性来设置环境变量。
这是使用上述代码运行的完整输出:
[Pipeline] Start of Pipeline
[Pipeline] withFolderProperties
[Pipeline] {
[Pipeline] echo
Applying Production Area Configuration...
[Pipeline] echo
0 0 * * *
[Pipeline] }
[Pipeline] // withFolderProperties
[Pipeline] End of Pipeline
hudson.remoting.ProxyException: java.lang.NullPointerException: Cannot invoke "String.split(String)" because "format" is null
at hudson.scheduler.CronTabList.create(CronTabList.java:111)
at hudson.scheduler.CronTabList.create(CronTabList.java:99)
at hudson.triggers.Trigger.<init>(Trigger.java:179)
at hudson.triggers.TimerTrigger.<init>(TimerTrigger.java:57)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
(如果需要,我可以提供完整的线程转储,但我相信上面的部分是问题所在。)
有人可以帮助解释为什么 CRON 字符串/表达式返回为 null 吗?我在这里缺少什么?
我认为该日志不是来自您发布的代码。
echo "Environment is ${env.ENVIRONMENT}"
的输出在哪里?其他字符串也不匹配...如果我不得不猜测您在某些 switch
分支中没有返回任何字符串。就像这里:
default:
echo "Unknown Environment, unable to handle Environment appropriately, will exit here..."
break
最后一个命令是
echo
,它返回null
,成为隐式返回值。