0

我想知道是否可以steps在 Jenkins 声明式管道中创建我自己的变体,所以我可以说:

pipeline {
  stages {
    stage('Do work') {
      stepsChuckNorrisWrote {
        ...
      }
    }
  }
}

我正在寻找的是一种编写步骤的优雅方式,即使它们失败也不会导致构建失败。

4

1 回答 1

2

我不知道有什么方法可以完全按照您的意愿去做,但是我认为您可以通过共享做一些使您达到 75%-100% 的事情(取决于发生错误时您对后续步骤的预期)图书馆:

pipeline {
  stages {
    stage('Do work') {
      steps {
          stepsChuckNorrisWrote {
        ...
          }
      }
    }
  }
}

然后在名为的共享库中创建一个全局变量stepsChuckNorrisWrote。你在这里传递一个闭包。该闭包可以包含您想要的所有步骤。将该闭包的执行包装在 try/catch 中,不要让它失败。

像这样的东西:

// vars/stepsChuckNorrisWrote.groovy
def call(Closure body) {
    node('windows') {
        try {
            body()
        } catch ( all ) {
            // handle errors here
        }
    }
}

使用这种方法,一旦第一步失败,其他任何一个都不会继续。可能有一些方法可以将每个步骤从闭包中拉出并基本上将其包装在 try/catch 中,但我不知道如何做这样的事情。

于 2017-10-19T17:51:59.527 回答