len*_*ovi 34 jenkins jenkins-pipeline
使用jenkins构建流程插件,这是可能的:
ignore(FAILURE){
build( "system-check-flow" )
}
Run Code Online (Sandbox Code Playgroud)
如何使用Declarative Pipeline语法执行此操作?
use*_*510 48
要忽略声明性管道中的失败步骤,您基本上有两个选项:
script步和try-catch块(类似于以前的R_K命题,但是以声明式的方式)Run Code Online (Sandbox Code Playgroud)stage('someStage') { steps { script { try { build job: 'system-check-flow' } catch (err) { echo err } } echo currentBuild.result } }
catchErrorRun Code Online (Sandbox Code Playgroud)stage('someStage') { steps { catchError { build job: 'system-check-flow' } echo currentBuild.result } }
在这两种情况下,构建都不会在例外情况下中止build job: 'system-check-flow'.在这两种情况下,echo将执行步骤(以及任何其他步骤).
但这两个选项之间存在一个重要区别.在第一种情况下,如果该try部分引发异常,则不会更改整体构建状态(so echo currentBuild.result=> SUCCESS).在第二种情况下,整体构建将失败(so echo currentBuild.result=> FAILURE).
这很重要,因为在第一种情况下(通过设置currentBuild.result = 'FAILURE')总是可以使整体构建失败,但是你无法 在第二种选项中修复构建(currentBuild.result = 'SUCCESS'不起作用).
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是最新的,因为此功能仅在“ Pipeline:Basic Steps” 2.16(2019年5月14日)之后可用。在此之前,catchError仍然可用,但没有参数:
steps {
catchError {
sh "exit 1"
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
我一直在寻找答案,并且找到了答案!我把try / catch块放在整个阶段:
try {
stage('some-stage') {
//do something
}
} catch (Exception e) {
echo "Stage failed, but we continue"
}
try {
stage("some-other-stage") { // do something }
} catch (Exception e) {
echo "Stage failed, but we still continue"
}
Run Code Online (Sandbox Code Playgroud)
这仍然不是理想的,但是它给出了必要的结果。
在最新版本中,可以通过propogate=false选项来构建步骤。
链接: https ://jenkins.io/doc/pipeline/steps/pipeline-build-step/
例:
build job:"jobName", propagate:false
对于我的 decalartive 管道,我找到了另一个解决方案:
stage('Deploy test')
{
steps
{
bat returnStatus: true, script: 'sc stop Tomcat9'
// The return value of the step will be the status code!
// evaluate return status yourself, or ignore it
}
}
Run Code Online (Sandbox Code Playgroud)
这同样适用于 sh 命令在 Unix 平台上执行脚本。
该示例忽略了返回状态,因为由于先前的管道运行失败,tomcat 可能已经停止。
小智 5
试试这个例子:
stage('StageName1')
{
steps
{
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')
{
SomeCodeThatCanBeErrored
}
}
}
stage('StageName2')
{
steps
{
ContinueOtherCode
}
}
Run Code Online (Sandbox Code Playgroud)
catchError作为对用作步骤或脚本中的现有工作解决方案的补充,您还可以用作阶段catchError选项。
如果您想在父阶段捕获多个子阶段的错误,这非常有用:
pipeline {
agent any
stages {
stage('Tests') {
options {
catchError(message: "Test failed", stageResult: 'UNSTABLE', buildResult: 'UNSTABLE')
}
stages {
stage('Test 1') {
echo 'test 1 succeeded'
}
stage('Test 2') {
error 'test 2 failed'
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这没有明确记录,但有一个提示,您可以使用步骤作为选项(强调我的):
但是,阶段级选项只能包含重试、超时或时间戳等步骤,或与阶段相关的声明性选项,例如skipDefaultCheckout。
它列出了几个步骤作为示例,但并不是唯一可能用作选项的步骤。此外,如果您输入无效选项,Jenkins 会在错误消息中列出所有可用选项,其中包括catchError.
小智 3
在新的管道中,您可以使用 try-catch 来实现这一点。
node{
try{
build job: 'system-check-flow'
}
catch (err){
echo "system-check-flow failed"
}
try{
build job: 'job2'
}
catch (err){
echo "job2 failed"
}
}
Run Code Online (Sandbox Code Playgroud)
在这里它将构建“系统检查流程”作业。如果失败,它将捕获错误,忽略,然后继续构建“job2”
| 归档时间: |
|
| 查看次数: |
37664 次 |
| 最近记录: |