Cuando está utilizando un proyecto de estilo libre, puede configurar que después de 20 minutos la compilación se cancele si no se concluye. ¿Cómo es esto posible con un proyecto de canalización de múltiples ramas de Jenkins?
fuente
Cuando está utilizando un proyecto de estilo libre, puede configurar que después de 20 minutos la compilación se cancele si no se concluye. ¿Cómo es esto posible con un proyecto de canalización de múltiples ramas de Jenkins?
Puede utilizar el paso de tiempo de espera :
timeout(20) {
node {
sh 'foo'
}
}
Si necesita un valor diferente TimeUnit
a MINUTES , puede proporcionar el unit
argumento:
timeout(time: 20, unit: 'SECONDS') {
EDITAR agosto de 2018: hoy en día, con las canalizaciones declarativas más comunes (reconocidas fácilmente por la pipeline
construcción de nivel superior ), los tiempos de espera también se pueden especificar usando options
en diferentes niveles (por canalización general o por etapa):
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
Aún así, si desea aplicar un tiempo de espera a un solo paso en una canalización declarativa, se puede usar como se describe anteriormente.
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Referencia de paso .def n=Jenkins.instance.getNode("ETService3") if (n!=null && n.computer && n.computer.online) { echo "Online" } else { echo "Offline" // wait a little bit and try again }
Una forma complicada es adquirir el nodo dos veces. La primera vez con tiempo de espera externo, la segunda con tiempo de espera interno. También me falta la función.Para una canalización declarativa , se recomienda utilizar el paso de tiempo de espera en la sección de opciones .
El paso de tiempo de espera tiene 3 parámetros que puede configurar:
time (obligatorio, int)
actividad (opcional, booleano)
unidad (opcional, valores: NANOSECONDS, MICROSECONDS, MILISECONDS, SECONDS, MINUTES, HOURS, DAYS)
Ejemplos:
La documentación oficial de Jenkins tiene un ejemplo muy bueno para el uso de un tiempo de espera:
fuente
activity
tiene falso por defecto. Cuandoactivity
es falso: tiempo de espera para todo el trabajo,true
tiempo de espera para la actividad (para imprimir cualquier cosa en el registro).timeout
para una etapa en particular de tal manera que la etapa siguiente se ejecute con gracia. En el ejemplo anterior, la canalización se cancela después del tiempo de espera y las etapas posteriores no se ejecutan. ¿Hay alguna forma de cumplir con mi requisito? Código de muestra para el tiempo de espera de una etapa determinada (del documento oficial de Jenkins):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }