如何仅在拉取请求中在Jenkins中运行舞台?

时间:2018-01-04 19:56:01

标签: git jenkins

我有一个基于Jenkinsfile的管道,它现在有几个阶段,每次提交给Github时都会被webhook触发。我想保持"构建"和"单元测试"在每次提交时运行的阶段,但只运行"集成测试"分支处于拉取请求的阶段。

我想要的是什么:

stage("build)"{
    // runs every commit
}
stage("unit tests"){
    // runs every commit
}
stage("integration tests"){
    // runs ONLY on pull request
}

我一直无法找到解决方案,任何想法?

3 个答案:

答案 0 :(得分:1)

在#jenkins IRC频道询问后,我被指向了正确的方向。这可以使用https://wiki.jenkins.io/display/JENKINS/SCM+Filter+Branch+PR+Plugin

脚本管道:

if(env.CHANGE_ID) {
// do something because it's a pull request
} else {
// not a pull request
}

声明性管道:

pipeline {
stages {
    stage('Example Deploy') {
        when {
            allOf {
                environment name: 'CHANGE_ID', value: ''
                branch 'master'
            }
        }
        steps {
            // not a pull request so do something
        }
    }
}

}

答案 1 :(得分:1)

我会使用 Jenkins changeRequest() 的内置条件。

stage ("sample") {
    when {
        anyOf {
            changeRequest()
            branch BRANCH_MAIN
        }
    steps {
            // not a pull request so do something
    }
   }

}

文档:https://www.jenkins.io/doc/book/pipeline/syntax/#stages

答案 2 :(得分:0)

我发现了无需任何插件的声明性管道的简单方法,并且可以在任何地方使用。

        stage (' PR check ') {
        when {
                branch 'PR-*'  
            }

            steps {
            sh '''
            echo "PULL REQUEST CHECK IS DONE HERE"
            '''

            }

        }