首页 > 解决方案 > Jenkinsfile - 仅在检测到更改时才触发定时(cron)

问题描述

我有一个詹金斯文件。

我想做一个夜间构建(假设是午夜),但前提是自上次构建以来检测到更改。

我将如何做到这一点?

标签: jenkinsjenkins-pipeline

解决方案


您可以使用:

pipeline {
    agent any
    triggers {
        pollSCM('H */4 * * 1-5')
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

根据 Jenkins 文档,pollSCM执行以下操作:

接受 cron 样式的字符串来定义 Jenkins 应检查新源更改的定期间隔。如果存在新的更改,管道将被重新触发。

有一种更复杂的方法可以完成相同的行为(只是 的替代方法pollSCM),即放置一个普通的 cron:

triggers {
    cron('H */4 * * 1-5')
}

然后检查环境变量的变化:

stage('Example') {
    when {
       expression {
           !env.currentBuild.changeSets.isEmpty()
       }
    }
    steps {
        echo 'Hello World'
    }
}

同样根据文档,env.currentBuild.changeSets

这是来自不同 SCM 签出的变更集列表;每个都有一个种类并且是一个提交列表;每个提交都有一个commitId、timestamp、msg、author和affectedFiles,每个都有一个editType和路径;该值通常不是可序列化的,因此您只能在标记为 @NonCPS 的方法中访问它

参考:


推荐阅读