Jenkins脚本化管道:根据哪个cron触发器进行不同的操作

时间:2018-10-04 15:21:45

标签: jenkins jenkins-pipeline

我有一个脚本化的管道,我想执行不同的操作:

  • 每天:运行测试
  • 每个周末:运行非常长的静态分析任务

我知道我可以定义多个触发器

properties(
    pipelineTriggers([cron("0 12 * * *"), cron("* * * * 6")])
)

但是我不知道以后如何定义工作

if (???) {
    sh "run complex task"
} else if (???) {
    sh "run tests"
}

如何找出哪个cron规则触发了我的任务?

1 个答案:

答案 0 :(得分:1)

我相信您在构建期间无法获得cron信息。 TimerTriggerCause仅包含由计时器触发生成的信息。

node {
    properties([
    pipelineTriggers([cron("* * * * *")])
])
   def timeTriggerCause = currentBuild.rawBuild.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause)
   println timeTriggerCause?.getShortDescription()
}

解决方案组合:

  • 在构建期间检查日期
  • 使用多个管道。您可以使用布尔参数(即RunComplexTask)将所有逻辑分成一个管道。其他管道(由计时器触发)将调用此管道并为布尔参数传递适当的值。

编辑:我添加了多个管道设置的示例

PIPELINE_RUN_COMPLEX_TASK:

node {
    properties([pipelineTriggers([cron('* * * * 6')])])
    build job: 'PIPELINE_MAIN', parameters: [booleanParam(name: 'RunComplexTask', value: true)]
}

PIPELINE_RUN_TESTS:

node {
    properties([pipelineTriggers([cron('0 12 * * *')])])
    build job: 'PIPELINE_MAIN', parameters: [booleanParam(name: 'RunComplexTask', value: false)]
}

PIPELINE_MAIN:

if(RunComplexTask.toBoolean())
{
    echo "Running complex task"
}
else
{
    echo "Running tests"
}

管道主管道具有我提到的布尔参数。