我们可以在多个阶段使用触发器指令吗

时间:2021-07-01 12:19:04

标签: jenkins-pipeline jenkins-declarative-pipeline

嗨,我想知道多个阶段是否可以有 triggers 指令,如果没有,那么我需要某种方式来安排每个阶段

pipeline{
    stages{
        stage{
            triggers{cron (#some_exp)}
            steps{
                # Some steps
            }
        }
        stage{
            triggers{cron (#some_exp)}
            steps{
                # Some steps
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果您想分别触发每个阶段,这意味着每个阶段可能是一个单独的业务逻辑单元,因此您应该认真考虑为每个步骤创建一个单独的作业,以避免将它们全部打包成具有多个触发器的单个作业和打包逻辑。

但是,如果您仍然想实现您想要的,您可以使用 Parameterized Scheduler Plugin 来实现,它使您能够定义使用特定环境变量触发作业的 cron 触发器,然后您可以使用此变量作为条件确定要执行的步骤。

这是一个实现它的例子:

pipeline {
    agent any
    parameters {
        string(name: 'STAGE', defaultValue: 'setup', description: 'Which stage to run')
    }
    triggers {
        parameterizedCron('''
        */2 * * * * %STAGE=setup
        */3 * * * * %STAGE=build
        ''')
    }
    stages {
        stage('Setup') {
            when {
                expression { STAGE== 'setup' }
            }
            steps {
                echo "In Setup stage - STAGE parameter is ${STAGE}" 
                ...
            }
        }
        stage('Build') {
            when {
                expression { STAGE== 'build' }
            }
            steps {
                echo "In Build stage - STAGE parameter is ${STAGE}"
                ...
            }
        }
        ...
    }
}