使用自由样式项目时,您可以设置20分钟后,如果未结束,则中止构建。Jenkins多分支管道项目如何做到这一点?
Answers:
您可以使用超时步骤:
timeout(20) {
node {
sh 'foo'
}
}
如果你需要一个不同的TimeUnit
比MINUTES,您可以提供的unit
参数:
timeout(time: 20, unit: 'SECONDS') {
编辑2018年8月:如今,使用更常见的声明性管道(易于被顶层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 }
一种棘手的方法来两次获取该节点。第一次使用外部超时,第二次使用内部超时。我也缺少该功能。
对于声明性管道,建议在options-section中使用超时步骤。
以确定的超时限制执行块内的代码。如果达到了时间限制,则会引发异常(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException),这将导致构建中止(除非以某种方式捕获并处理了该构建)。单位是可选的,但默认为分钟。
超时步骤有3个参数可以配置:
时间(必填,整数)
活动(可选,布尔值)
单位(可选,值:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS)
例子:
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
为特定阶段添加某种方式,以便后续阶段可以正常运行。在上面的示例中,管道在超时后中止并且不执行后续阶段。有没有办法满足我的要求?给定阶段超时的示例代码(来自官方Jenkins Doc):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ 步骤参考下获得参考。