Jenkins 在给定的时间间隔触发构建 Step/Stage(不是整个作业)
Jenkins Triggering of a Build Step/Stage(not the entire job) at a given interval
我正在尝试建立一个管道,我需要在其中链接多个作业,其中一些作业必须在特定时间开始。
例如:工作 1(午夜开始)-> 工作 2 -> 工作 3 -> 工作 4(下午 4 点开始)
使用声明式语法:
pipeline {
agent any
stages{
stage('Fetch Latest Code-1') {
steps{
build job: 'Get Latest - All Nodes', quietPeriod: 60
}
}
stage('CI Day - 1') {
parallel {
stage('ANZ CI'){
steps{
build job: 'ANZ - CI', quietPeriod: 120
}
}
stage('BRZ CI'){
steps{
build job: 'BRZ_CI', quietPeriod: 120
}
}
stage('NAM CI'){
steps{
build job: 'NAM - CI', quietPeriod: 120
}
}
}
}
stage('BEP Part 2') {
steps{
build job: 'BEP_CI_Verification_Job', quietPeriod: 180
}
}
stage('Intermediate Results') {
steps{
build job: 'CI Automation Results', parameters: [string(name: 'Files', value: '_CI_')], quietPeriod: 300
}
}
}
}
创建此作业时,我已将作业配置为在午夜 12 点开始。因此,第一份工作会在午夜自动开始。
但是,我还需要第二份工作(CI 第 - 1 天)在凌晨 1 点开始,最后一份工作 'Intermediate results' 在下午 6 点开始。
因为这些作业是多配置作业(已经尝试在所需的时间单独设置它们,但在通过管道调用时它们会被覆盖)。
此外,确实在 stage/steps 中尝试了触发器 { cron(0 1 * * 6) }。运气不好!
这是在一天中的特定时间启动另一项工作的快速想法。使用 Groovy 代码,计算所需启动时间与当前时间之间的秒差,并将其用作 quietPeriod
参数的参数。
如果出现错误 "Scripts not permitted to use method",您必须使用 "Manage Jenkins" > "In-process script approval".
批准方法
import groovy.time.*
pipeline {
agent any
stages{
stage('Stage 1') {
steps{
script {
def secs = secondsUntil hourOfDay: 15, minute: 30, second: 0
echo "anotherjob will be triggered in $secs seconds"
build job: 'anotherjob', quietPeriod: secs
}
}
}
}
}
long secondsUntil( Map dateProperties ) {
def now = new Date()
def to = now.clone()
to.set( dateProperties )
long duration = TimeCategory.minus( to, now ).toMilliseconds() / 1000
return duration > 0 ? duration : 0
}
我正在尝试建立一个管道,我需要在其中链接多个作业,其中一些作业必须在特定时间开始。
例如:工作 1(午夜开始)-> 工作 2 -> 工作 3 -> 工作 4(下午 4 点开始)
使用声明式语法:
pipeline {
agent any
stages{
stage('Fetch Latest Code-1') {
steps{
build job: 'Get Latest - All Nodes', quietPeriod: 60
}
}
stage('CI Day - 1') {
parallel {
stage('ANZ CI'){
steps{
build job: 'ANZ - CI', quietPeriod: 120
}
}
stage('BRZ CI'){
steps{
build job: 'BRZ_CI', quietPeriod: 120
}
}
stage('NAM CI'){
steps{
build job: 'NAM - CI', quietPeriod: 120
}
}
}
}
stage('BEP Part 2') {
steps{
build job: 'BEP_CI_Verification_Job', quietPeriod: 180
}
}
stage('Intermediate Results') {
steps{
build job: 'CI Automation Results', parameters: [string(name: 'Files', value: '_CI_')], quietPeriod: 300
}
}
}
}
创建此作业时,我已将作业配置为在午夜 12 点开始。因此,第一份工作会在午夜自动开始。
但是,我还需要第二份工作(CI 第 - 1 天)在凌晨 1 点开始,最后一份工作 'Intermediate results' 在下午 6 点开始。
因为这些作业是多配置作业(已经尝试在所需的时间单独设置它们,但在通过管道调用时它们会被覆盖)。
此外,确实在 stage/steps 中尝试了触发器 { cron(0 1 * * 6) }。运气不好!
这是在一天中的特定时间启动另一项工作的快速想法。使用 Groovy 代码,计算所需启动时间与当前时间之间的秒差,并将其用作 quietPeriod
参数的参数。
如果出现错误 "Scripts not permitted to use method",您必须使用 "Manage Jenkins" > "In-process script approval".
批准方法import groovy.time.*
pipeline {
agent any
stages{
stage('Stage 1') {
steps{
script {
def secs = secondsUntil hourOfDay: 15, minute: 30, second: 0
echo "anotherjob will be triggered in $secs seconds"
build job: 'anotherjob', quietPeriod: secs
}
}
}
}
}
long secondsUntil( Map dateProperties ) {
def now = new Date()
def to = now.clone()
to.set( dateProperties )
long duration = TimeCategory.minus( to, now ).toMilliseconds() / 1000
return duration > 0 ? duration : 0
}