在 Jenkins 中,有没有办法为每个或选定的构建步骤提供不同的超时?
构建时插件在整个项目中提供了超时功能“如果它被卡住则中止构建”,我需要为每个步骤提供不同的超时。这样我可以使我的过程更有效率。
10 回答
如果您使用的是 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
}
这个问题最初是在 Jenkins 流水线存在之前提出的。尽管您可以继续通过 GUI 使用和配置 Jenkins,但目前建议将您的项目转换到管道。使用流水线可以跟踪对流水线的更改,并将其存储为代码,以便在需要移动 Jenkins 服务器时轻松地在任何机器上重新创建构建。
使用管道,为构建的特定部分添加超时是微不足道的。管道语法简单易用。
timeout(time:5, unit:'DAYS') {
input message:'Approve deployment?', submitter: 'it-ops'
}
构建超时插件不适用于管道。参考维基
对于管道超时,请尝试以下操作:
timeout(time: 30, unit: 'MINUTES') {
node {
sh 'foo'
}
}
另一个线程的类似答案: 如何向 Jenkins Pipeline 添加超时步骤
我不知道没有这样的功能。JENKINS-8900请求它。
请为您的 Jenkins 安装 Build Timeout 插件。
Jenkins> 管理 Jenkins> 管理插件
在可用选项卡中搜索 Build Timeout .. 安装它。你会在构建环境中找到它作为“如果它被卡住则中止构建”。设置超时策略和时间。绝对截止日期 Elastic 可能没有活动
就我而言,我使用了无活动。
希望能帮助到你。
我认为timeout
来自 GNU coreutils 的命令可能是你想要的。这是假设您的构建步骤是脚本。
最简单的方法(这就是我正在这样做的方式)是实际上让不同的项目相互依赖并连续构建它们。它并不完美,但另一种选择是使用不同的工具/构建行为监视不同插件的执行。
尽管如此,这种方法仍然有效,尽管它确实很糟糕......
顺便说一句,有一个不错的插件可以帮助您使用一组项目 -构建管道插件。我现在正在使用它来可视化和验证我创建的管道。真的很方便。。。
如果您不想使用 Jenkins 插件并且想要使脚本或任何命令超时,那么您可以使用 Linux 内置实用程序“超时”。
timeout -s KILL 1m ./test
上述命令将运行test
1 分钟,如果它在超时后继续执行,则该命令将超时并通过KILL
实用程序终止进程。