我有一系列快速检查的阶段。即使有失败,我也想要完成它们。例如:
stage('one') {
node {
sh 'exit 0'
}
}
stage('two') {
node {
sh 'exit 1' // failure
}
}
stage('three') {
node {
sh 'exit 0'
}
}
阶段two
失败,因此默认情况下,阶段three
不会执行。
通常这是parallel
的工作,但我想在舞台视图中显示它们。在下面的模拟中:
two
失败,因此three
无法运行。two
失败并显示,但three
仍然运行。真正的Jenkins可能会显示整个Build#6略带红色,这当然没问题。答案 0 :(得分:7)
我有同样的担忧,我能够解决这个问题。
第二阶段将以红色显示并标记为失败,同时其余阶段将继续运行。 您可以设置一个标志,并在阶段结束时检查该标志,您可以通知整个构建的状态。
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"
}
}
答案 1 :(得分:5)
这应该有效。但是,即使只有一个框失败,所有框都是红色的,但是您可以看到标有错误的框,这样您就可以轻松区分失败的作业。
def indexes = ['one', 'two', 'three']
node() {
for (index in indexes) {
catchError {
stage(index) {
println index
sh '''echo "123"'''
}
}
}
}
答案 2 :(得分:4)
使用
传播:假
如果上一阶段失败,则移至下一阶段。
示例:
stage('<stage-name>'){
node('<node-name>'){
build job: '<job-name>', propagate: false
}
}
stage('<stage-name>'){
node('<node-name>'){
build job: '<job-name>'
}
}
答案 3 :(得分:2)
这取决于您使用的是declarative pipeline syntax还是scripted pipeline syntax。
声明性管道语法:
pipeline {
agent any
stages {
stage('one') {
steps {
sh 'exit 0'
}
}
stage('two') {
steps {
sh 'exit 1' // failure
}
}
}
post {
always {
sh 'exit 0'
}
}
}
Post-condition blocks包含steps与steps部分相同。
脚本化管道语法:
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"
}
}
答案 4 :(得分:2)
现在可以。以下是声明性管道的示例,但是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是最新的,因为这是一个相当新的功能。
答案 5 :(得分:1)
我通过后期操作解决了这个问题: https://jenkins.io/doc/pipeline/tour/post/
const scrollTrigger = useScrollTrigger(() => {{ target: contentRef.current }});
答案 6 :(得分:0)
解决方案::为了始终继续执行詹金斯管道中失败的步骤:
选项1 。在try / catch或bash脚本<someOpertation> || true
尝试/捕获:
script {
try {
sh 'do your stuff'
} catch (Exception e) {
sh 'Handle the exception!'
}
}
bash始终为真:
script {
sh 'cp ~/someFile.txt ~/dev || true'
}
选项2。并行运行jenkins管道,并在您的步骤中设置failFast false
配置属性。
pipeline {
agent any
stages {
stage('Parallel Stage') {
when {
branch 'master'
}
failFast false
parallel {
stage('Branch A') {
agent {
label "for-branch-a"
}
steps {
echo "On Branch A"
}
}
stage('Branch B') {
agent {
label "for-branch-b"
}
steps {
echo "On Branch B"
}
}
}
}
}
}
答案 7 :(得分:0)
尝试以下示例:
stage('StageName1')
{
steps
{
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')
{
SomeCodeThatCanBeErrored
}
}
}
stage('StageName2')
{
steps
{
ContinueOtherCode
}
}