我有一系列执行快速检查的阶段。我想完成所有这些,即使有失败。例如:
stage('one') {
node {
sh 'exit 0'
}
}
stage('two') {
node {
sh 'exit 1' // failure
}
}
stage('three') {
node {
sh 'exit 0'
}
}
第二阶段失败,因此默认情况下第三阶段不执行。
通常这将是并行
的工作,但我想在阶段视图中显示它们。在下面的模型中:
two
失败,因此two
不运行
这取决于您使用的是声明性管道语法还是脚本管道语法。
声明性管道语法:
pipeline {
agent any
stages {
stage('one') {
steps {
sh 'exit 0'
}
}
stage('two') {
steps {
sh 'exit 1' // failure
}
}
}
post {
always {
sh 'exit 0'
}
}
}
Post条件块包含与步骤部分相同的步骤。
脚本化管道语法:
node {
def build_ok = true
stage('one') {
sh 'exit 0'
}
try{
stage('two') {
sh 'exit 1' // failure
}
} catch(e) {
build_ok = false
echo e.toString()
}
stage('three') {
sh 'exit 0'
}
if(build_ok) {
currentBuild.result = "SUCCESS"
} else {
currentBuild.result = "FAILURE"
}
}
我也有同样的担忧。我能够解决它这样做。
第二阶段将显示为红色,并标记为失败,而其余阶段将继续运行。您可以设置一个标志,在阶段结束时检查标志并通知整个构建的状态。
node {
def build_ok = true
stage('one') {
sh 'exit 0'
}
try{
stage('two') {
sh 'exit 1' // failure
}
} catch(e) {
build_ok = false
echo e.toString()
}
stage('three') {
sh 'exit 0'
}
....
if(build_ok) {
currentBuild.result = "SUCCESS"
} else {
currentBuild.result = "FAILURE"
}
}
这现在是可能的。下面是一个声明性管道的示例,但是catchError
也适用于脚本化管道。
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'
}
}
}
}
在上面的示例中,所有阶段都将执行,管道将成功,但阶段2将显示为失败:
正如您可能已经猜到的,您可以自由选择buildResult
和stageResult
,以防它不稳定或其他任何情况。您甚至可以使构建失败并继续执行管道。
只要确保您的Jenkins是最新的,因为这是一个相当新的功能。
编辑:您需要“管道:基本步骤”2.16(2019年5月14日)
我想在Jenkins声明性管道语法中定义多个阶段,它们可以在任何一个失败后继续。我找不到任何现存的真正重复的问题,因为它们都假定或允许脚本语法。 为了澄清,我不寻求如何在脚本语法中实现这一点。我试图理解这种流控制是否在声明性语法中得到支持和形式化。为此,我将尝试准确定义我要寻找的内容: < li >没有尝试/捕捉。我不想陷入脚本模式,或者将我的声明性管道“包装”在另一个共享库或脚本块中。 < li
问题内容: 如何报告声明式管道失败的阶段?在fail块中,我想获取failureStage.name并将其报告(最终报告为松弛)。 问题答案: PipelineVisitor是一种很好的方法。但是,如果您只想查看错误,那么利用可能会更好。 以下内容提供了每个失败步骤的映射列表,并且还遍历了下游作业。我发现它非常有用。 您将要使用共享库来避免安全沙箱警告/批准
Jenkins版本=2.19 Jenkins多分支管道插件版本=2.92 我有一个Jenkinsfile,其中有一些基于分支的条件阶段。 为了简洁起见,这是我的Jenkinsfile的修改版本: 我正在使用多分支管道插件。 它成功地检测并构建了我所有的分支。 我的问题是,所有构建报告为失败,即使我悬停每个阶段,它报告'成功'。 我附上了一张图片,显示了一个功能分支,其中我想要运行的两个阶段已经运行
问题内容: 我必须与GIT存储库(bitbucket)进行交互。如果我通过bash尝试任何clone / push / pull命令,则效果很好。 无论如何,如果我尝试在jenkins中设置克隆uri,则会得到: 为什么? 问题答案: Jenkins正在使用GnuTLS来处理与Bitbucket通信的TLS部分(即“ HTTPS”中的“ S”)。在这种情况下,有些事情使GnuTLS无法正确建立TL
问题内容: 绝对詹金斯管道/时髦菜鸟在这里,我有一个舞台 使用共享库,其源在这里: 问题是,当无法将构建推送到远程存储库时(请参见下文),阶段仍然最终显示成功。 如何使shell脚本的退出代码冒泡并使阶段失败? 问题答案: 该步骤返回的状态代码与实际的sh命令(在本例中为您的脚本)返回的状态代码相同。从sh文档中: 通常,以非零状态代码退出的脚本将导致该步骤失败并出现异常。 您必须确保脚本失败时返
我正在编写一个Groovy脚本,其中包含部署terraform的作业。我正在使用作业DSL并使种子作业由JCasC实现,一切正常。然后我有一个包含作业的Groovy文件的存储库。 如果我将Groovy文件保持为单个作业,它就可以正常工作。 然而,我希望能够构建具有构建阶段的管道。我知道我可以把管道写在詹金斯文件中 我有这个作为开始: 但是,我看到了这个错误: 我已经尝试了各种方法,并阅读了一堆文档