我有一个基于Jenkinsfile的管道,它现在有几个阶段,每次提交给Github时都会被webhook触发。我想保持"构建"和"单元测试"在每次提交时运行的阶段,但只运行"集成测试"分支处于拉取请求的阶段。
我想要的是什么:
stage("build)"{
// runs every commit
}
stage("unit tests"){
// runs every commit
}
stage("integration tests"){
// runs ONLY on pull request
}
我一直无法找到解决方案,任何想法?
答案 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
}
}
}
答案 2 :(得分:0)
我发现了无需任何插件的声明性管道的简单方法,并且可以在任何地方使用。
stage (' PR check ') {
when {
branch 'PR-*'
}
steps {
sh '''
echo "PULL REQUEST CHECK IS DONE HERE"
'''
}
}