【发布时间】:2012-08-27 09:14:08
【问题描述】:
在 Jenkins 中,有没有办法为每个或选定的构建步骤提供不同的超时时间?
构建时插件在整个项目中提供了超时功能“如果它被卡住则中止构建”,我需要为每个步骤提供不同的超时。这样我可以让我的流程更有效率。
【问题讨论】:
标签: jenkins build-process build-automation jenkins-plugins
在 Jenkins 中,有没有办法为每个或选定的构建步骤提供不同的超时时间?
构建时插件在整个项目中提供了超时功能“如果它被卡住则中止构建”,我需要为每个步骤提供不同的超时。这样我可以让我的流程更有效率。
【问题讨论】:
标签: jenkins build-process build-automation jenkins-plugins
如果您使用 Jenkins 流水线,并且使用较新的声明式样式(具有顶级 pipeline { 元素),则有一个 timeout option 可用于整体工作或单个阶段:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS') // timeout on whole pipeline job
}
stages {
stage('Example') {
options {
timeout(time: 1, unit: 'HOURS') // timeout on this stage
}
steps {
echo 'Hello World'
}
}
}
}
【讨论】:
【讨论】:
在管道作业中,您可以使用timeout 包装您的步骤,如下所示:
timeout(time: 5, unit: 'MINUTES') {
// steps to execute
}
【讨论】:
pipeline { agent { label 'xxx' } options { timestamps(); timeout(time: 2, unit: 'HOURS') } stages { stage('Stage-One') { steps { /* one or more steps here */ } } } }
这个问题最初是在 Jenkins 流水线存在之前提出的。尽管您可以继续通过 GUI 使用和配置 Jenkins,但目前建议将您的项目过渡到管道。使用流水线可以跟踪对流水线的更改,并将其存储为代码,以便在需要移动 Jenkins 服务器时轻松在任何机器上重新创建构建。
使用管道,为构建的特定部分添加超时是微不足道的。管道语法简单易用。
timeout(time:5, unit:'DAYS') {
input message:'Approve deployment?', submitter: 'it-ops'
}
相关问题:How to add a timeout step to Jenkins Pipeline
示例无耻取自:CloudBees Top 10 Best Practices for Jenkins Pipeline Plugin
【讨论】:
构建超时插件不适用于管道。参考wiki
对于管道超时,请尝试以下操作:
timeout(time: 30, unit: 'MINUTES') {
node {
sh 'foo'
}
}
另一个帖子的类似回答: How to add a timeout step to Jenkins Pipeline
【讨论】:
据我所知,没有这样的功能。 JENKINS-8900 请求它。
【讨论】:
请为您的 Jenkins 安装 Build Timeout 插件。
Jenkins> 管理 Jenkins> 管理插件
在可用选项卡中搜索构建超时.. 安装它。 您会在构建环境中找到它作为“如果它被卡住则中止构建”。 设置超时策略和时间。 绝对 最后期限 松紧带 可能卡住了 没有活动
在我的情况下,我使用了 No Activity。
希望对你有帮助。
【讨论】:
我认为timeout command from GNU coreutils 可能是您想要的。这是假设您的构建步骤是脚本。
【讨论】:
最简单的方法(我就是这样做的)实际上是让不同的项目相互依赖并连续构建它们。它并不完美,但另一种选择是使用不同的工具/构建行为监视不同插件的执行。
不过,这种方法还是会奏效的,尽管它确实很糟糕......
顺便说一句,有一个不错的插件可以帮助您使用一组项目 - Build Pipeline plugin。我现在正在使用它来可视化和验证我创建的管道。真的很方便……
【讨论】:
如果您不想使用 Jenkins 插件并且想要使脚本或任何命令超时,那么您可以使用 Linux 内置实用程序“超时”。
timeout -s KILL 1m ./test
上述命令将运行test 可执行文件1 分钟,如果它在超时后继续执行,则该命令将超时并由KILL 实用程序终止进程。
【讨论】: