每晚和每次提交后运行Jenkins管道

每晚和每次提交后运行Jenkins管道,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我们希望运行Jenkins管道: 每晚,但仅当所选分支(dev或master)中有任何提交时 在每一次犯罪之后 需要注意的是,夜间构建还需要额外的步骤(长时间运行的集成测试) 可能吗?我们如何在Jenkinsfile中配置此功能?因此,您的问题归结为以下几个方面: 如何运行夜间构建 如果在过去24小时内没有提交,如何停止生成 我如何运行一个“长期运行”阶段,但不总是这样 让我们逐一解决这些问题 如果安装了parameterizedCron插件,则可以使用cron或parameterizedC

我们希望运行Jenkins管道:

  • 每晚,但仅当所选分支(dev或master)中有任何提交时
  • 在每一次犯罪之后
需要注意的是,夜间构建还需要额外的步骤(长时间运行的集成测试)


可能吗?我们如何在Jenkinsfile中配置此功能?

因此,您的问题归结为以下几个方面:

  • 如何运行夜间构建
  • 如果在过去24小时内没有提交,如何停止生成
  • 我如何运行一个“长期运行”阶段,但不总是这样
  • 让我们逐一解决这些问题

  • 如果安装了parameterizedCron插件,则可以使用
    cron
    parameterizedCron
    进行夜间构建。由于您似乎希望在所有分支机构中运行您的作业,这可能看起来像
  • 要解决其他问题,您需要知道构建运行的原因。它可能由个人、cron或commit触发。一旦您确定触发构建的是
    cron
    ,您可能需要查看
    git log
    以了解最新提交的时间
  • 后来:

    if ( currentBuildReason() == "TIMER" and env.BRANCH == "master" ) {
       def gitLog = sh script: "git log", returnStdout: true
       // look for the date, and stop the build
    
  • 最后,您可以根据条件运行步骤。一种方法是为作业定义一个参数,指示是否应该运行集成测试。这将允许一个人在选择框时运行它们,即使不是每晚。例如
  • 后来

            stage('Integration tests') {
                agent { node { label "integration_test_slave" }}
                when {
                    beforeAgent true
                    expression {params.RUN_LONG_TEST}
                }
                steps {
                    // run integration test
                }
           }
    
    要在选中参数的情况下安排夜间活动,需要parameterizedCron插件:

    pipeline {
        agent any
        triggers {
            // schedule a nightly build at random time after 0am on dev branch, 1am on master
            parameterizedCron(env.BRANCH_NAME == 'dev' ? '0 * * * *  % RUN_LONG_TEST=true' : '') 
            parameterizedCron(env.BRANCH_NAME == 'master' ? '1 * * * *  % RUN_LONG_TEST=true'' : '') 
    

    或者,如果只有夜总会运行该参数,您可以忽略该参数,并分析
    currentBuildReason()
    的值。当它等于计时器时,这些测试应该运行。

    因此,您的问题归结为几个:

  • 如何运行夜间构建
  • 如果在过去24小时内没有提交,如何停止生成
  • 我如何运行一个“长期运行”阶段,但不总是这样
  • 让我们逐一解决这些问题

  • 如果安装了parameterizedCron插件,则可以使用
    cron
    parameterizedCron
    进行夜间构建。由于您似乎希望在所有分支机构中运行您的作业,这可能看起来像
  • 要解决其他问题,您需要知道构建运行的原因。它可能由个人、cron或commit触发。一旦您确定触发构建的是
    cron
    ,您可能需要查看
    git log
    以了解最新提交的时间
  • 后来:

    if ( currentBuildReason() == "TIMER" and env.BRANCH == "master" ) {
       def gitLog = sh script: "git log", returnStdout: true
       // look for the date, and stop the build
    
  • 最后,您可以根据条件运行步骤。一种方法是为作业定义一个参数,指示是否应该运行集成测试。这将允许一个人在选择框时运行它们,即使不是每晚。例如
  • 后来

            stage('Integration tests') {
                agent { node { label "integration_test_slave" }}
                when {
                    beforeAgent true
                    expression {params.RUN_LONG_TEST}
                }
                steps {
                    // run integration test
                }
           }
    
    要在选中参数的情况下安排夜间活动,需要parameterizedCron插件:

    pipeline {
        agent any
        triggers {
            // schedule a nightly build at random time after 0am on dev branch, 1am on master
            parameterizedCron(env.BRANCH_NAME == 'dev' ? '0 * * * *  % RUN_LONG_TEST=true' : '') 
            parameterizedCron(env.BRANCH_NAME == 'master' ? '1 * * * *  % RUN_LONG_TEST=true'' : '') 
    

    或者,如果只有夜总会运行该参数,您可以忽略该参数,并分析
    currentBuildReason()
    的值。当它等于计时器时,这些测试应该运行。

    “仅当有任何提交”从何时开始?每次提交到任何分支后?如果没有任何提交,是否应该运行长时间运行的测试?@MaratC,前提是前一个夜间构建中有任何提交。如果没有提交,则无需触发长时间运行的测试。感谢“只有在有任何承诺的情况下”从什么时候开始?每次提交到任何分支后?如果没有任何提交,是否应该运行长时间运行的测试?@MaratC,前提是前一个夜间构建中有任何提交。如果没有提交,则无需触发长时间运行的测试。谢谢