Ale*_*vey 2 jenkins jenkins-pipeline
我有一个像这样的詹金斯管道工作:
triggers {
parameterizedCron(env.BRANCH_NAME == "master" ? "0 12 * * * % RUN_E2E=true;MODE=parallel" : "")
}
Run Code Online (Sandbox Code Playgroud)
后来我有这样的条件逻辑:
stage('Build Release') {
when {
allOf {
branch 'master'
not {
triggeredBy 'TimerTrigger'
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,triggeredBy 并未激活。也就是说,即使在parameterizedCron 运行时,“不是由timerTrigger 触发”似乎也是true。
我从这里的文档中得到了这个例子。
我的问题是,如果我希望构建/发布阶段仅在分支== master上执行,而不是在parameterizedCron执行期间执行,我该怎么做?
你的问题是,这parameterizedCron不是a ,只有常规的才是。TimerTriggercron
满足您的要求的最简单方法是添加参数并将其设置为parameterizedCron:
triggers {
parameterizedCron(env.BRANCH_NAME == "master" ? "0 12 * * * % RUN_E2E=true;MODE=parallel;SHOULD_BUILD_RELEASE=no" : "")
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
stage('Build Release') {
when {
allOf {
branch 'master'
expression { SHOULD_BUILD_RELEASE == 'yes' }
}
}
Run Code Online (Sandbox Code Playgroud)
否则,您可能会以编程方式发现触发构建的原因,如果发现是parameterizedCron触发了构建/发布部分,则退出构建/发布部分。请参阅此处的示例。在 的情况下parameterizedCron,相关部分是这样的:
timerCause = currentBuild.rawBuild.getCause(org.jenkinsci.plugins.parameterizedscheduler.ParameterizedTimerTriggerCause)
if (timerCause) {
echo "Build reason: Build was started by parameterized timer"
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以尝试使用确切的类,如下所示(我还没有检查它,它可能会也可能不会起作用):
stage('Build Release') {
when {
allOf {
branch 'master'
not {
triggeredBy 'ParameterizedTimerTriggerCause'
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8764 次 |
| 最近记录: |