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?
Respuestas:
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.
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 .
Ejecuta el código dentro del bloque con un límite de tiempo de espera determinado. Si se alcanza el límite de tiempo, se lanza una excepción (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException), lo que lleva a abortar la compilación (a menos que se detecte y procese de alguna manera). La unidad es opcional pero el valor predeterminado es minutos.
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:
timeout(time: 10) // would lead to a timeout of 10 minutes (MINUTES is default value)
timeout(time: 10, unit: 'SECONDS') // a 10 seconds timeout
timeout(time: 10, activity: false, unit: 'MILLISECONDS')
La documentación oficial de Jenkins tiene un ejemplo muy bueno para el uso de un tiempo de espera:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
tiene falso por defecto. Cuando activity
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' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Referencia de paso .