【问题标题】:Jenkins workflow (pipeline) - build job only when there are SCM changesJenkins 工作流程(管道) - 仅在 SCM 更改时构建作业
【发布时间】:2017-06-09 19:44:23
【问题描述】:

我正在使用工作流插件(重命名为管道插件)创建相当复杂的工作流。为简单起见,假设我需要构建一个工作,但这个工作非常昂贵,并且不需要每次都构建。仅当有一些 SCM 更改时。

所以我们称这个工作为 expensiveJob,它的源代码管理是 SCMRepositoryA

所以我基本上想说

build job: 'expensiveJob'

我想轮询 SCM 更改并根据该信息构建作业。

有没有办法做到这一点?

我目前的解决方案是我必须在管道脚本中签出 SCMRepositoryA,然后检查 currentBuild.rawBuild.changeSets 在我看来喜欢很多不必要的工作,并且可能必须与我工作中的任何源代码管理变化保持一致..

【问题讨论】:

  • Periodic check SCM,在Build trigger 下,在作业配置中您正在寻找什么?
  • 不,这份工作会影响我其他工作的结果。所以它必须从工作流(管道)中进行编排。

标签: jenkins jenkins-workflow


【解决方案1】:

目前没有与 build 等效的步骤,它只会启动轮询,而不是无条件地安排构建。

编写这样一个步骤,或者将其作为build 步骤的一个选项,我认为不会特别困难。同时,对于非沙盒脚本,您可以直接调用 Jenkins API 执行相同操作:如果下游项目配置了 SCM 触发器(只需轮询 @daily,或者根本没有计划),那么

Jenkins.instance.getItemByFullName('downstream').SCMTrigger.run()

可能足以立即安排轮询(未经测试)。或者,如果您想直接运行轮询,或者不想假设一个空白的 `SCMTrigger,那么

if (Jenkins.instance.getItemByFullName('downstream').poll(TaskListener.NULL).hasChanges()) {
    build 'downstream'
}

(再次未经测试)可以工作。不过,API 调用可能需要包装在 @NonCPS 方法中,因为中间结果不是 Serializable

if (poll('downstream')) {
    build 'downstream'
}
@NonCPS boolean poll(String job) {
    Jenkins.instance.getItemByFullName(job).poll(TaskListener.NULL).hasChanges()
}

【讨论】:

  • 像魅力一样工作!谢谢杰西!
【解决方案2】:

使用公认的答案,这就是我设置声明性管道的方式,以跳过一些昂贵的阶段,这些阶段取决于作业是否是最新的

stages {
    stage('Need to build?') {
        steps {
            script {
                env.changesPending = Jenkins.instance.getItemByFullName('expensive').poll(hudson.model.TaskListener.NULL).hasChanges()
                echo "env.changesPending=" +env.changesPending
            }
        }
    }
    stage('Pre-requisites') {
        when {
            expression { env.changesPending == true }
        }
        steps {
            build 'expensive'
        }
    }
    ...

这需要http://your-jenkins/scriptApproval/ 中的几个脚本授权才能起作用

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多