为主分支

时间:2017-08-04 09:00:59

标签: git jenkins nightly-build

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

  1. CI - > PollSCM每5分钟(只有主人),构建并运行测试。
  2. 明确 - >每晚运行(构建,测试,集成测试并在夜间服务器上部署)
  3. Sprintly - >它是一个参数化作业,每周四使用手动创建的标记运行。 (在sprintly服务器上构建,测试,集成测试和部署)
  4. 为此目的,我在春天有一个带有maven的小项目,这将是我开始的最好的例子(简单,容易和快速建立)。

    目前我已经有了一个用于CI构建的Multibranch管道,但是我希望将这个工作整合到Nightly和Sprintly构建中。

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

    目前我有这个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"'
            }
        }
    

1 个答案:

答案 0 :(得分:4)

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

  1. 将在每个分支中运行maven构建的Multibranch管道(可以配置为每n分钟轮询scm或由存储库中的webhook启动。
  2. 将被配置为在夜间触发的管道(称为夜间)(在作业配置中,而不是在管道中)并将部署到夜间系统并仅使用主分支(也在Jenkins作业中配置)
  3. 管道(称为sprintly),但参数化为使用某个标签运行并仅使用主分支
  4. 管道应保持简单:

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

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