当前位置: 首页 > 知识库问答 >
问题:

由Jenkins管道中的参数化Cron触发

欧阳何平
2023-03-14

我有一个 Jenkins 管道工作,如下所示:

  triggers {
    parameterizedCron(env.BRANCH_NAME == "master" ? "0 12 * * * % RUN_E2E=true;MODE=parallel" : "")
  }

后来我有这样的条件逻辑:

    stage('Build Release') {
      when {
        allOf {
          branch 'master'
          not {
            triggeredBy 'TimerTrigger'
          }
        }
      }

然而,触发器没有被激活。也就是说,“not triggered by timerTrigger”即使在parameterizedCron运行时也似乎是真的。

我从这里的文档中得到了这个例子。

我的问题是,如果我希望我的构建/发布阶段仅在branch == master上执行,而不是在参数化Cron执行期间执行,我该怎么做?

共有1个答案

长孙谦
2023-03-14

您的问题是< code>parameterizedCron不是< code>TimerTrigger,只有常规的< code>cron才是。

满足要求的最简单方法是添加一个参数并在参数化Cron中设置它:

triggers {
    parameterizedCron(env.BRANCH_NAME == "master" ? "0 12 * * * % RUN_E2E=true;MODE=parallel;SHOULD_BUILD_RELEASE=no" : "")
  }

然后,您可以执行以下操作:

    stage('Build Release') {
      when {
        allOf {
          branch 'master'
          expression { SHOULD_BUILD_RELEASE == 'yes' }
        }
      }

否则,您可能会以编程方式发现触发构建的原因,如果事实证明参数化Cron触发了构建/发布部分,则会退出构建/发布部分。有关示例,请参阅此处。在参数化Cron的情况下,相关部分是这样的:

timerCause = currentBuild.rawBuild.getCause(org.jenkinsci.plugins.parameterizedscheduler.ParameterizedTimerTriggerCause)
if (timerCause) {
    echo "Build reason: Build was started by parameterized timer"
}

最后,您可以尝试使用确切的类,如下所示(我没有检查过它,它可能会也可能不会起作用):

    stage('Build Release') {
      when {
        allOf {
          branch 'master'
          not {
            triggeredBy 'ParameterizedTimerTriggerCause'
          }
        }
      }
 类似资料:
  • 问题内容: 有任何方法可以从具有参数的另一个管道触发管道作业,我已经尝试过 也尝试过 和 没有运气,它说: 项目类型不支持参数 问题答案: 由于子作业是另一个多分支管道项目,因此我需要指定我要运行的分支 现在可以用了

  • 问题内容: 我在Jenkins中配置了项目,该项目轮询SCM并在发布更改时开始构建。有一个后构建动作来构建另一个项目。我的问题是,之后要构建的项目具有其自己的参数。如何知道生成后操作触发时指定了哪个参数?现在,如果我使用“选择”,是否只是选择第一个?我如何挑选其他人? 问题答案: 好吧,让我们一个接一个:) 如果要查看使用了哪个参数,可以安装此插件:显示构建参数插件 如果要使用特定参数触发构建,请

  • 问题内容: 我在dsl作业中使用Active Choices反应参考参数插件,此处代码 我现在想要的是如何在jenkinsFile中使用activeChoiceReactiveParam进行管道作业,这很好,我做到了: 但是我怎么能添加choice2参数! 问题答案: 而不是我在下面做的使用 主动选择反应式参考参数 ,它工作正常!

  • 我正在使用詹金斯声明管道,不知道是否有任何方法可以定期触发特定阶段。 我的意思是,当我们签出SCM时,管道会触发,但阶段2对我们的一些项目来说太长了。因此,我不想等待这个阶段,我只想每天运行这个阶段,但仍然将这个阶段保存在Jenkins文件中。 有没有办法做到这一点?这样做的最佳方法是什么?

  • 我们在Jenkins系统中大量使用管道作业,需要能够使用复制工件的作业参数来参数化步骤。 首先,我发现当参数返回一个

  • 问题内容: Jenkins声明性管道中的参数可以动态吗? 我希望选择选项值在运行时由函数填充。以下代码确实生成了选项列表,但它们似乎过时了- 可能是在我第一次运行此代码时生成的。如果AMI列表更改,则选择将保持不变。我希望每次选择都运行此命令。 EDIT 我最终使用,带有扩展选择参数。目前它不支持该参数,因此我对其进行了修改https://review.openstack.org/#q,I0c6a