Quando você está usando um projeto de estilo livre, você pode definir que após 20 minutos a construção seja abortada se não for concluída. Como isso é possível com um projeto Jenkins Multi Branch Pipeline?
Respostas:
Você pode usar a etapa de tempo limite :
timeout(20) {
node {
sh 'foo'
}
}
Se precisar de um diferente TimeUnit
de MINUTES , você pode fornecer o unit
argumento:
timeout(time: 20, unit: 'SECONDS') {
EDITAR agosto de 2018: Hoje em dia, com os pipelines declarativos mais comuns (facilmente reconhecidos pela pipeline
construção de nível superior ), os tempos limites também podem ser especificados usando options
em diferentes níveis (por pipeline geral ou por estágio):
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
Ainda assim, se você deseja aplicar um tempo limite a uma única etapa em um pipeline declarativo, ele pode ser usado conforme descrito acima.
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 }
Uma maneira complicada é adquirir o nó duas vezes. A primeira vez com tempo limite externo, a segunda com tempo limite interno. Eu também estou perdendo o recurso.
Para um Pipeline Declarativo , é aconselhável usar a etapa de tempo limite na seção de opções .
Executa o código dentro do bloco com um determinado limite de tempo. Se o limite de tempo for atingido, uma exceção (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) é lançada, o que leva ao aborto da compilação (a menos que seja capturado e processado de alguma forma). A unidade é opcional, mas o padrão é minutos.
A etapa de tempo limite tem 3 parâmetros que você pode configurar:
tempo (obrigatório, interno)
atividade (opcional, booleano)
unidade (opcional, valores: NANOSSEGUNDOS, MICROSECONDOS, MILISSEGUNDOS, SEGUNDOS, MINUTOS, HORAS, DIAS)
Exemplos:
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')
A documentação oficial do Jenkins tem um exemplo muito bom para o uso de um tempo limite:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
tem falso como padrão. Quando activity
é falso - tempo limite para todo o trabalho, true
tempo limite para atividade (para imprimir qualquer coisa no log).
timeout
para um determinado estágio de forma que o estágio subsequente seja executado normalmente. No exemplo acima, o pipeline é abortado após o tempo limite e os estágios subsequentes não são executados. Existe uma maneira de cumprir meu requisito? Amostra de código para o tempo limite de um determinado estágio (do documento oficial 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/
→ Step Reference .