Когда вы используете проект в свободном стиле, вы можете установить, что через 20 минут сборка будет прервана, если не будет завершена. Как это возможно с проектом Jenkins Multi Branch Pipeline?
Ответы:
Вы можете использовать шаг тайм-аута :
timeout(20) {
node {
sh 'foo'
}
}
Если вам нужно значение, отличное TimeUnit
от MINUTES , вы можете указать unit
аргумент:
timeout(time: 20, unit: 'SECONDS') {
ИЗМЕНИТЬ август 2018: В настоящее время с более распространенными декларативными конвейерами (легко распознаваемыми конструкцией верхнего уровня pipeline
) таймауты также могут быть указаны с использованием options
на разных уровнях (для общего конвейера или для каждого этапа):
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
Тем не менее, если вы хотите применить тайм-аут к одному шагу в декларативном конвейере, его можно использовать, как описано выше.
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 }
Сложный способ - получить узел дважды. Первый раз с внешним таймаутом, второй с внутренним таймаутом. Мне тоже не хватает этой функции.
Для декларативного конвейера рекомендуется использовать шаг тайм-аута в разделе параметров .
Выполняет код внутри блока с заданным пределом времени ожидания. Если лимит времени достигнут, генерируется исключение (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException), которое приводит к прерыванию сборки (если только оно не будет каким-то образом поймано и обработано). Единица измерения не является обязательной, но по умолчанию используется минуты.
Шаг тайм-аута имеет 3 параметра, которые вы можете настроить:
время (обязательное, целое)
активность (необязательный, логический)
единица измерения (необязательно, значения: НАНОСЕКУНД, МИКРОСЕКУНД, МИЛЛИСЕКУНД, СЕКУНД, МИНУТЫ, ЧАСЫ, ДНИ)
Примеры:
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')
В официальной документации Jenkins есть очень хороший пример использования тайм-аута:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
по умолчанию имеет значение false. Когда activity
ложно - тайм-аут для всего задания, true
тайм-аут для активности (для вывода чего-либо в журнал).
timeout
для определенного этапа таким образом, чтобы последующий этап работал плавно. В приведенном выше примере конвейер прерывается по истечении тайм-аута, и последующие этапы не выполняются. Есть ли способ выполнить мое требование? Пример кода для тайм-аута данного этапа (из официального документа 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/
→ Ссылка на шаг .