dol*_*phy 11 jenkins jenkins-pipeline jenkins-declarative-pipeline
我想在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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了澄清,我不是在寻找如何在脚本语法中完成此任务.我试图理解这种流控制是否实际上是在声明性语法中支持和形式化的.为此,我将尝试准确定义我正在寻找的内容:
post step恶作剧.我想要真正的多个阶段,而不是一个post always包含我所有其他逻辑的步骤Eri*_*k B 18
这现在是可能的:
pipeline {
agent any
stages {
stage('1') {
steps {
sh 'exit 0'
}
}
stage('2') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh "exit 1"
}
}
}
stage('3') {
steps {
sh 'exit 0'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,所有阶段都将执行,管道将成功,但阶段 2 将显示为失败:
正如您可能已经猜到的那样,您可以自由选择buildResult和stageResult,以防您希望它不稳定或其他任何东西。您甚至可以使构建失败并继续执行管道。
只要确保您的 Jenkins 是最新的,因为这是一个相当新的功能。
编辑:这是这个答案最初写的问题。这也是其他一些问题的正确答案,这就是为什么我也在那里发布了这个答案。这是多个类似问题的正确解决方案。我已经针对他们的具体问题量身定制了我的其他答案,以阐明这一点。我只是复制了答案以节省一些时间。这并不意味着它不是一个好的正确答案。
我可能遗漏了一些东西,但声明式、固执己见的管道的想法是覆盖大多数简单的用例。当您需要固执己见尚未涵盖的内容时,您必须诉诸脚本化管道,这仅指“声明式管道”的“要求”:现在不会发生。
至于您的其他“要求”,它们没有什么意义,因为整个想法是将低级丑陋包装到共享库中,为用户提供如下结构:
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"
}
}
}
})
Run Code Online (Sandbox Code Playgroud)
当然,您必须找到或实现这样的mylib类,并且failable_stages会得到一个闭包,并将其包装在各种管道/样板代码片段中。
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
11588 次 |
| 最近记录: |