Jenkinsfile检查推送或合并请求是否触发了构建

时间:2017-05-23 08:04:37

标签: git jenkins jenkins-pipeline

现在我已经配置了jenkins gitlab连接和gitlab webhook来触发jenkins工作。

我想创建Jenkinsfile,其中某些任务仅在构建由push触发时执行,而其他任务仅在构建由merge请求触发时执行。我使用管道工作。这可能吗?

BUILD_CAUSE变量什么都没有显示。

感谢。

4 个答案:

答案 0 :(得分:1)

我不认为这是可能的。你最好的办法是写两个单独的工作。 1在推送事件上触发,而其他触发事件仅在合并请求时触发。您可以做的另一件事是编写一个单独的webhook,它根据推送/合并事件发送不同的参数,并使用条件BuildStep插件配置您的jenkins作业。

答案 1 :(得分:1)

如果你正在使用gitlab jenkins插件,你可以检查是否设置了env变量gitlabMergeRequestId。

答案 2 :(得分:0)

看看Jenkins Builtin Functions。 您可能正在寻找changeRequest

  

如果当前构建用于“更改请求”(在GitHub和Bitbucket上也称为Pull Request>,在GitLab上进行Merge Request或Gerrit更改等),则执行阶段。当没有   传递参数时,阶段将在每个更改请求上运行,例如:当{   changeRequest()}。

答案 3 :(得分:0)

  • 如果您位于when块中,则可以按照here

    的说明使用changeRequest变量
  • 如果您位于script块中或管道的任何其他部分中,则可以在第一阶段创建这样的变量,并在各处使用它


def isPullRequest = false

pipeline {
  agent {
    // ....
  }
  stages {
    stage('First stage') {
      steps {
        script {
          isPullRequest = env.CHANGE_ID != null
        }
      }
    }
    // other stages...
  }
}