尝试从另一项工作中启动预定的 Jenkins 工作

问题描述 投票:0回答:1

我正在使用声明式管道按计划启动现有作业(具有不同的参数),因此具有类似于:-

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
处于同一水平?

jenkins triggers cron jenkins-plugins jenkins-groovy
1个回答
0
投票

您可以使用参数化调度程序插件实现您想要的目标。
该插件支持在构建计划中设置参数,从而允许您根据参数安排参数化构建在不同时间以不同配置运行。

例如,考虑以下管道:

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
    }
}

因此,您有一个不受手动执行影响的自定义作业计划。

© www.soinside.com 2019 - 2024. All rights reserved.