试图从另一个工作中启动一个预定的Jenkins工作

ntjbwcob  于 2023-10-17  发布在  Jenkins
关注(0)|答案(1)|浏览(158)

我使用声明性管道来启动一个计划上的现有作业(使用不同的参数),因此有类似于:

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处于同一级别?

gmxoilav

gmxoilav1#

您可以使用Parameterized Scheduler Plugin实现您想要的功能。
该插件支持在构建计划中设置参数,从而允许您根据参数在不同的时间使用不同的配置来调度参数化构建。
例如,考虑以下管道:

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

所以你有一个自定义的时间表为您的工作,这是不受手动执行。

相关问题