Jenkins 声明性管道 - 如果不满足某些条件而不是跳过一个阶段,如何中止整个构建?

Posted

技术标签:

【中文标题】Jenkins 声明性管道 - 如果不满足某些条件而不是跳过一个阶段,如何中止整个构建?【英文标题】:Jenkins declarative pipeline - How to abort whole build if certain conditions are not met instead of skipping a stage? 【发布时间】:2021-09-03 05:40:01 【问题描述】:

我可以在 jenkins 声明式管道中成功使用 when 条件跳过一个阶段,但如果不满足一组条件,我想提前中止构建。我尝试将 when 块放在***内部阶段和外部阶段,但它给出的语法错误分别为“预期阶段”和“未定义部分”。谁能建议我如何使它工作?

      when 
            anyOf 
                not 
                    equals expected: true, actual: params.boolean_parameter
                
    
                not
                    equals expected: '', actual: params.string_parameter
                
            
        

【问题讨论】:

这很可能是不可能的。您可能不想在这些情况下触发构建。 您可以在阶段开始的脚本块中使用 try/catch 块。 support.cloudbees.com/hc/en-us/articles/… 【参考方案1】:

在声明式管道中,when 指令只能用于阶段。 为了解决您的问题,您可以创建一个用于中止管道的虚拟阶段,以防不符合条件的情况,在该步骤中,您可以使用常规的 when 指令,并在阶段的步骤中使用 error 关键字使用相关消息中止构建(请参阅error 文档)。 比如:

pipeline 
   agent any
   stages 
       stage('Validate Conditions') 
           when 
               anyOf 
                   not 
                       equals expected: true, actual: params.boolean_parameter
                   
                   not
                       equals expected: '', actual: params.string_parameter
                   
               
           
           steps 
               error("Aborting the build because conditions are not met")
           
       
       ... // rest of pipeline
   

这样,如果条件不满足,构建将被中止,但是帖子部分仍将执行,允许您发送通知等,如果需要。

【讨论】:

以上是关于Jenkins 声明性管道 - 如果不满足某些条件而不是跳过一个阶段,如何中止整个构建?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用声明性 Jenkins 管道在同一节点上运行多个阶段?

Jenkins声明性管道:如何从输入步骤中读取选择?

如何使用变量名作为声明性Jenkins的参数运行ArtifactoryMavenBuild?

Jenkins groovy 管道 - 为另一个管道调用构建步骤

如何在 Jenkins 声明式管道中创建方法?

在 Jenkins 声明式管道中使用 waitForQualityGate