有没有一种方法可以跳过整个Jenkins管道(而不是一个阶段)

有没有一种方法可以跳过整个Jenkins管道(而不是一个阶段),jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我有一个包含多个项目的单一repo,这也是不同框架/技术中的api 我有多个詹金斯管道设置,以满足所有这些工作,并处理舞台上的条件,以跳过他们使用例如 when { changeset "**servicelayer/*" } 上面是一个场景,如果有人将文件签入到特定文件夹,我不希望执行完整管道。但这只允许跳过特定阶段。是否有一种方法可以在管道级别验证,以查看是否满足条件,然后跳过整个作业 注意:我已经尝试在Jenkins管道级别配置包

我有一个包含多个项目的单一repo,这也是不同框架/技术中的api

我有多个詹金斯管道设置,以满足所有这些工作,并处理舞台上的条件,以跳过他们使用例如

when { 
                changeset "**servicelayer/*"
            }
上面是一个场景,如果有人将文件签入到特定文件夹,我不希望执行完整管道。但这只允许跳过特定阶段。是否有一种方法可以在管道级别验证,以查看是否满足条件,然后跳过整个作业


注意:我已经尝试在Jenkins管道级别配置包含/排除区域。这对我根本不起作用。

这是一段时间了,我解决了问题,但忘了发布答案。它可能在将来帮助某人。更正它或添加一个更好的解决方案的意见,我会很高兴地使用,如果发现成功

在此处添加一些注释以解释步骤

stage('Validation') {
    steps {
            //Moving in to the directory to execute the commands
            dir('servicelayer') {
                script {
                    //Using the git command to check the difference between previous successful commit. ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} is an environment variable comes with GIT Jenkins plugin
                    //There is a drawback though, if it is the first time you are running this job, this variable is not available and fails the build
                    //For the first time i had to use ${env.GIT_COMMIT} itself at both places to pass the build. A hack but worth it for future builds.

                    def strCount = sh(returnStdout: true, script: "git diff --name-only ${env.GIT_COMMIT} ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} | grep servicelayer | wc -l").trim()
                    if(strCount=="0") {
                        echo "Skipping build no files updated"
                        CONTINUE_BUILD = false
                    } else {
                        echo "Changes found in the servicelayer module"
                    }
                }
            }
        }
   }
stage('Installation') {
        when {
            expression { return params.FORCE_BUILD || CONTINUE_BUILD }
        }
        steps {
            dir('servicelayer') {
                nodejs(nodeJSInstallationName:"${NODEJS_INSTALLATION_NAME}", configId:"${NODEJS_CONFIG_ID}") {
                    sh 'npm install --progress=false'
                }
            }
        }    
    }

感谢@Rohittomas分享这篇文章。正如我提到的,我尝试添加额外的行为,为包含/排除区域提供基于java模式的正则表达式,但不知何故,它不起作用。我已经在几个网站上测试了这个表达,看看我是否犯了错误,但它很好。因此,我不得不使用when表达式来检查变更集。我使用的表达式是“servicelayer\/[a-zA-Z0-9\\s\.]*”我试图找到变更集,但它始终正确地位于上述正则表达式下。但是仍然没有用。试着给出实际的文件夹名,比如
servicelayer/myfolder
,看看这是否有效,暂时忽略regex部分…包含/排除区域的原因是,如果它有效,那么作业本身将不会执行。。。但是,在作业将被触发的情况下,如果没有问题,那么只需执行一个
sh“exit 1”
它将使整个构建失败。我碰巧遇到了与您类似的问题。我对你的解决办法有疑问。
CONTINUE\u BUILD
是跳过整个jenkins管道的关键吗?因为当strCount==“0”时,我没有看到任何特殊操作,只有一个“echo”和一个正常赋值。如果是,变量
CONTINUE\u BUILD
如何使整个管道被跳过。你能提供更多的细节吗?谢谢你。很抱歉回复晚了,我不知怎么错过了通知。是的,当表达式继续或停止时,我使用了CONTINUE_构建变量。更新上述代码段以提供更多信息。