Коли ви використовуєте проект вільного стилю, ви можете встановити, що через 20 хвилин збірка буде перервана, якщо не завершена. Як це можливо за допомогою проекту багатогалузевого трубопроводу Дженкінса?
Відповіді:
Ви можете використовувати крок очікування :
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 параметри, які ви можете налаштувати:
час (потрібно, int)
діяльність (необов’язково, логічне значення)
одиниця (необов’язково, значення: НАНОСЕКУНДИ, МІКРОСЕКУНДИ, МІЛІСЕКУНДИ, СЕКУНДИ, ХВИЛИНИ, ГОДИНИ, ДНІ)
Приклади:
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')
В офіційній документації Дженкінса є дуже гарний приклад використання тайм-ауту:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
має значення false за замовчуванням. Коли activity
значення false - час очікування для всієї роботи, час true
очікування для активності (щоб надрукувати що-небудь у журналі).
timeout
для конкретного етапу таким чином, що наступний етап повинен працювати елегантно. У наведеному вище прикладі конвеєр переривається після закінчення тайм-ауту, а наступні етапи не виконуються. Чи є спосіб виконати мою вимогу? Зразок коду для тайм-ауту даного етапу (з офіційного документа Дженкінса):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Посилання на крок .