Jenkins:由提交到目标分支触发的 PR 管道

时间:2021-04-08 12:57:13

标签: jenkins

我有以下Jenkinsfile

pipeline {
    environment {
        STAGING_BRANCH = 'project'
    }
    agent any
    stages {
        stage('Staging Environment') {
            steps {
                sh "sh /bin/create-staging-env"
                }
            }
            when {
                expression { env.CHANGE_TARGET == env.STAGING_BRANCH && env.CHANGE_ID }
            }
        }
    }
}

条件 expression { env.CHANGE_TARGET == env.STAGING_BRANCH && env.CHANGE_ID } 仅在它是拉取请求且目标分支为 project 时才执行该阶段。

我有一个只有 1 个提交的拉取请求:

enter image description here

但詹金斯多次 (7) 次运行此管道:

enter image description here

我对附加构建的触发的猜测是,当提交被推送到另一个分支时,并且该分支有一个拉取请求。

编辑 现在我明白了为什么要创建这些构建。它们是由对目标分支 project 的提交引起的,因为目标分支因提交而改变,Jenkins 将再次执行该 PR 的管道。

然后我的问题变为,如何获取触发此管道的提交被推送到哪个分支。例如,如果提交被推送到 project 分支,我想忽略 PR 的阶段。我想做类似expression { ... && env.COMMIT_BRANCH != 'project'}

1 个答案:

答案 0 :(得分:0)

查看阶段的 when 分支子句。您可以告诉 Jenkins 在特定分支上运行阶段并跳过阶段,例如

stage('PR stuff') {
   when {
       not {
           branch 'project'
       }
   }
   steps {
     sh 'something '
  }
}

您也可以使用 all of 和 any of 来匹配 when too 中的多个子句