如何从基于git commit的管道中间开始构建

时间:2017-01-26 15:01:41

标签: jenkins jenkins-pipeline

我有以下管道(基本上,并行3个下游版本中的Build_BASE触发器):

             -> BUILD1
Build_BASE   -> BUILD2
             -> BULID3

如果有人对Build_Base进行git提交,它将启动整个管道。

但如果有人提交了BUILD1或2或3,我希望构建从那时开始,而不是构建Build_Base。这可能吗?

这是我的管道的精简版本(我还没有添加git轮询)

stage('Base_AMI') {
  node('eod-us-west-2_shared') {
    stage('Build') {
      deleteDir()
      git branch: 'master', credentialsId: '2df157d3-f9c3-4005-91d0-b3052764474f', url: 'git@github.com:myrepo/base_ami.git'
      sh "bash do_build.sh"
    }
  }
}

stage("DOWNSTREAM_BUILDS"){
  parallel (
    "BUILD1" : {
       node('eod-us-west-2_shared') {
         wrap([$class: 'BuildUser']) {
             sh 'echo ${BUILD_USER}'
             deleteDir()
             git branch: 'master', credentialsId: '2df157d3-f9c3-4005-91d0-b3052764474f', url: 'git@github.com:myrepo/build1.git'
             sh "bash do_build.sh"
         }
      }
    },
    "BUILD2" : {
       node('eod-us-west-2_shared') {
             deleteDir()
             git branch: 'master', credentialsId: '2df157d3-f9c3-4005-91d0-b3052764474f', url: 'git@github.com:myrepo/build2.git'
             sh "bash /private/myrepo/git_clone_repo.sh"
             sh "bash do_build.sh"
         }
     },
    "BUILD3" : {
       node('eod-us-west-2_shared') {
             deleteDir()
             git branch: 'master', credentialsId: '2df157d3-f9c3-4005-91d0-b3052764474f', url: 'git@github.com:myrepo/build3.git'
             sh "bash do_build.sh"
         }
     }
  )
}

1 个答案:

答案 0 :(得分:0)

似乎应该发生的事情是你的每个git存储库都应该在它自己的Jenkins文件的管道上。

然后在你的上游工作中你会做:

stage("DOWNSTREAM_BUILDS"){
  parallel (
    // job 1, 2 and 3 will be scheduled in parallel.
    { build("job1") },
    { build("job2") },
    { build("job3") }
  )
}

整个技巧是你的管道配置 - 每个应该只轮询它自己的git存储库。