example - jenkinsfile
Muestre una etapa de gasoducto de Jenkins como fallida sin fallar en todo el trabajo (4)
Hace poco traté de usar la etapa de respuesta Show Show Jenkins de vaza como fallida sin fallar el trabajo completo como plantilla para escribir una función que excuta un trabajo en una etapa propia con el nombre del nombre del trabajo. Sorprendentemente funcionó, pero tal vez algunos expertos en groovy lo miran :)
Así es como se ve si uno de los trabajos se cancela:
def BuildJob(projectName) {
try {
stage(projectName) {
node {
def e2e = build job:projectName, propagate: false
result = e2e.result
if (result.equals("SUCCESS")) {
} else {
error ''FAIL'' //sh "exit 1" // this fails the stage
}
}
}
} catch (e) {
currentBuild.result = ''UNSTABLE''
result = "FAIL" // make sure other exceptions are recorded as failure too
}
}
node {
BuildJob(''job1'')
BuildJob(''job2'')
}
Aquí está el código con el que estoy jugando
node {
stage ''build''
echo ''build''
stage ''tests''
echo ''tests''
stage ''end-to-end-tests''
def e2e = build job:''end-to-end-tests'', propagate: false
result = e2e.result
if (result.equals("SUCCESS")) {
stage ''deploy''
build ''deploy''
} else {
?????? I want to just fail this stage
}
}
¿Hay alguna forma de que marque la etapa de ''pruebas de extremo a extremo'' como fallida sin fallar en todo el trabajo? Propagar falso solo marca el escenario como verdadero, que no es lo que quiero, pero Propagar verdadero marca el trabajo como fallido que tampoco quiero.
Puede agregar una tarea de falla explícita, como ''sh'' not exists command '''' en el escenario.
if (result.equals("SUCCESS")) {
stage ''deploy''
build ''deploy''
} else {
try {
sh "not exist command"
}catch(e) {
}
}
Stage ahora necesita un bloque, entonces envuelve el escenario en try-catch. Try-catch dentro del escenario lo hace exitoso.
La nueva característica mencionada anteriormente será más poderosa. Mientras tanto:
try {
stage(''end-to-end-tests'') {
node {
def e2e = build job:''end-to-end-tests'', propagate: false
result = e2e.result
if (result.equals("SUCCESS")) {
} else {
sh "exit 1" // this fails the stage
}
}
}
} catch (e) {
result = "FAIL" // make sure other exceptions are recorded as failure too
}
stage(''deploy'') {
if (result.equals("SUCCESS")) {
build ''deploy''
} else {
echo "Cannot deploy without successful build" // it is important to have a deploy stage even here for the current visualization
}
}
Suena como JENKINS-26522 . Actualmente, lo mejor que puedes hacer es establecer un resultado global:
if (result.equals("SUCCESS")) {
stage ''deploy''
build ''deploy''
} else {
currentBuild.result = e2e.result
// but continue
}