首页 文章

如何继续使用Jenkins声明性管道语法中的失败阶段

提问于
浏览
7

我想在Jenkins声明性管道语法中定义多个阶段,这些阶段可以继续通过它们中的任何一个失败 . 我找不到任何真正重复的现有问题,因为它们都假定或允许脚本化语法 .

pipeline {
    agent any
    stages {
        stage('stage 1') {
            steps {
                echo "I need to run every time"
            }
        }
        stage('stage 2') {
            steps {
                echo "I need to run every time, even if stage 1 fails"
            }
        }
        stage('stage 3') {
            steps {
                echo "Bonus points if the solution is robust enough to allow me to continue *or* be halted based on previous stage status"
            }
        }
    }
}

为了澄清,我不是在寻找如何在脚本语法中完成此任务 . 我试图理解这种流控制是否实际上是在声明性语法中支持和形式化的 . 为此,我将尝试准确定义我正在寻找的内容:

必填

  • 没有尝试/捕捉 . 我不想在另一个共享库或脚本块中下载到脚本模式或"wrap"我的声明性管道 .

  • 没有 post step 恶作剧 . 我想要真正的多个阶段,而不是一个包含我所有其他逻辑的 post always 步骤

可选

  • 失败阶段应被视为失败;我不希望失败的舞台显示为绿色,因为它是"skipped"或"continued" .

  • 任何失败阶段的构建都应标记为红色(或黄色,或任何非绿色) .

相关但不充分

1 回答

  • 1

    我可能会遗漏一些东西,但声明式管道的想法是提供大多数简单用例的覆盖 . 当你需要 opinionated 没有涵盖的东西时,你必须求助于脚本管道,这只是指"declarative pipeline"的"requirement":现在不会发生 .

    至于你的其他“要求”,它们没有多大意义,因为整个想法是将低级丑陋包装到共享库中,为用户提供如下构造:

    mylib.failable_stages({
          stages {
            stage('stage 1') {
              steps {
                echo "I need to run every time"
              }
            }
            stage('stage 2') {
              steps {
                echo "I need to run every time, even if stage 1 fails"
              }
            }
            stage('stage 3') {
              steps {
                echo "Bonus points if the solution is robust enough to allow me to continue *or* be halted based on previous stage status"
              }
            }
          }
        })
    

    当然,您必须找到或实现这样的 mylib 类,并且 failable_stages 将获得一个闭包,并将其包装在各种管道/样板代码中 .

    希望这是有帮助的 .

相关问题