【问题标题】:Declarative Jenkins pipeline with Nightly deploy for master branch声明式 Jenkins 管道,每晚部署主分支
【发布时间】:2017-08-04 09:00:59
【问题描述】:

我想将一些工作转换为新的 Jenkins 2.0 声明式管道。目前他们是 3 个不同的工作:

  1. CI --> 每 5 分钟轮询一次 SCM(仅限 master),构建并运行测试。
  2. 夜间 --> 每晚运行(构建、测试、集成测试和部署在夜间服务器上)
  3. Sprintly --> 这是一个参数化作业,每周四使用手动创建的标签运行。 (在 sprintly 服务器上构建、测试、集成测试和部署)

为此,我在春季有一个使用 maven 的小项目,这将是我开始的最佳示例(构建简单、容易且快速)。

目前我已经有一个用于 CI 构建的 Multibranch 管道,但我想将 Nightly 和 Sprintly 构建集成到这项工作中。

  • 每晚:在要部署的主分支上运行 Cron 作业 在夜间服务器中。
  • Sprintly:基于我在主分支中生成的 Sprintly_tag 构建以部署在 Sprintly 服务器中。

目前我有这个 JenkinsFile

pipeline {
agent {
    label 'master'
}
tools {
    maven "Apache Maven 3.3.9"
    jdk "Java JDK 1.8 U102"
}
triggers {
        cron ('H(06-08) 01 * * *')
        pollSCM('H/5 * * * *')
}
stages {
    stage('Build') {
        steps {
            sh 'mvn -f de.foo.project.client/ clean package'
        }
        post {
            always {
                junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
                archiveArtifacts allowEmptyArchive: true, artifacts: '**/target/*.war'
            }
        }
    }
    stage('Deploy') {
                sh 'echo "Deploy only master"'
    }
}

当有东西被拉到 Git 时它运行每个分支,并且在晚上 1 点左右运行(但仍然运行所有分支)。

有什么想法或提示吗?不需要进行部署的代码我只想知道如何过滤/拆分位于同一个 JenkinsFile 中的分支

非常感谢大家!

编辑: 我也可以使用,但它会在晚上运行所有分支(我可以为 Cron 作业制作这个过滤器吗?)

        stage('DeployBranch') {
        when { branch 'story/RTS-525-task/RTS-962'}
        steps {
            sh 'echo "helloDeploy in the branch"'
        }
    }
    stage('DeployMaster') {
        when { branch 'master'}
        steps {
            sh 'echo "helloDeploy in the master"'
        }
    }

【问题讨论】:

    标签: git jenkins nightly-build


    【解决方案1】:

    四个月后,在阅读了我自己的问题后,我意识到我在尝试设置触发器和作业的方式上完全错了。 我们应该有 3 个不同的工作:

    1. 将在每个分支中运行 maven 构建的多分支管道(可以配置为每 n 分钟轮询一次 scm 或由存储库中的 webhook 启动。
    2. 管道(称为 nightly)将配置为在夜间触发(在作业配置中,而不是在管道中)并将部署到 nightly 系统并仅使用主分支(也在 Jenkins 作业中配置)李>
    3. 流水线(称为 sprintly)但参数化为使用特定标签运行并仅使用主分支

    管道应该保持简单,例如:

    pipeline {
    agent {
        label 'master'
    }
    tools {
        maven "Apache Maven 3.3.9"
        jdk "Java JDK 1.8 U102"
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn -f de.foo.project.client/ clean package'
            }
            post {
                always {
                    junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
                    archiveArtifacts allowEmptyArchive: true, artifacts: '**/target/*.war'
                }
            }
        }
        stage('Deploy') {
               when (env.JOB_NAME.endsWith('nightly')
                    sh 'echo "Deploy on nighlty"'
                when (env.JOB_NAME.endsWith('sprintly')
                    sh 'echo "Deploy only sprintly"'
        }
    }
    

    如果您有任何问题,请告诉我,我很乐意为您提供帮助:)

    【讨论】:

      猜你喜欢
      • 2022-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2017-12-03
      相关资源
      最近更新 更多