我正在使用声明式管道按计划启动现有作业(具有不同的参数),因此具有类似于:-
pipeline any
triggers {
cron('H 6 8 * *')
}
stages {
stage('Remove old AMIs from account 1') {
steps {
script {
b = build(job: 'another job',
parameters: [string(name: 'ACCOUNT', value: 'account1')
// some other parameters
}
}
}
stage('Remove old AMIs from account 2')
// ... removed for brevity
}
但是,这会产生在启动初始作业时运行一次初始作业的效果,然后在预定时间再次运行一次(每月 8 日运行一次)。
我想做的是安排目标作业(“另一个作业”)在特定时间运行,而不是上面的初始作业。
我尝试了各种组合,并扫描了搜索结果+文档,但我找不到适合这种特殊情况的任何内容。我猜我需要像
triggers
那样的东西,与 b = build 中的 job
/ parameters
处于同一水平?
您可以使用参数化调度程序插件实现您想要的目标。
该插件支持在构建计划中设置参数,从而允许您根据参数安排参数化构建在不同时间以不同配置运行。
例如,考虑以下管道:
pipeline {
agent any
parameters {
string(name: 'OPTION', defaultValue: 'manual')
}
triggers {
parameterizedCron('''
0 8 * * * %OPTION=autoMorning
0 20 * * * %PLANET=autoEvening
''')
stages {
stage('Remove old AMIs from account 1') {
when {
environment name: 'OPTION', value: 'manual'
}
steps {
build(job: 'JobA', parameters: ...)
}
}
stage('Remove old AMIs from account 1') {
when {
environment name: 'OPTION', value: 'autoMorning'
}
steps {
build(job: 'JobB', parameters: ...)
}
}
stage('Remove old AMIs from account 1') {
when {
environment name: 'OPTION', value: 'autoEvening'
}
steps {
build(job: 'JobB', parameters: ...)
}
}
}
}
在此管道中 -> 当您手动运行它时JobA将被执行,每天上午8点JobB将被执行,每天晚上8点JobC将被执行。
因此,无论执行类型如何,每个作业都可以有自己的时间表。
在你的情况下,它可能是这样的:
pipeline{
agent any
triggers {
// Set a customized schedule for the 'another job'
parameterizedCron('0 8 * * * %OPTION=another')
}
stages {
stage('Remove old AMIs from account 1') {
when {
environment name: 'OPTION', value: 'another'
}
steps {
script {
b = build(job: 'another job',
parameters: [string(name: 'ACCOUNT', value: 'account1') // some other parameters
}
}
}
stage('Remove old AMIs from account 2')
// ... removed for brevity
}
}
因此,您有一个不受手动执行影响的自定义作业计划。