jenkins - Jenkinsfile - 仅在检测到更改时才触发定时(cron)
问题描述
我有一个詹金斯文件。
我想做一个夜间构建(假设是午夜),但前提是自上次构建以来检测到更改。
我将如何做到这一点?
解决方案
您可以使用:
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 的方法中访问它
参考: