61

在 Jenkins 中,有没有办法为每个或选定的构建步骤提供不同的超时?
构建时插件在整个项目中提供了超时功能“如果它被卡住则中止构建”,我需要为每个步骤提供不同的超时。这样我可以使我的过程更有效率。

4

10 回答 10

48

如果您使用的是 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'
          }
        }
    }
}

文档:https ://jenkins.io/doc/book/pipeline/syntax/#options

于 2019-11-01T11:18:24.210 回答
38

在当前版本的 Jenkins 中,这是可以做到的。点击“配置”,然后选择“构建环境”选项卡,然后设置超时。

这是一个屏幕截图: 在此处输入图像描述

于 2017-10-26T15:02:35.310 回答
18

在管道作业中,您可以将步骤包装timeout如下:

timeout(time: 5, unit: 'MINUTES') {
   // steps to execute
}
于 2018-03-20T22:30:22.720 回答
9

这个问题最初是在 Jenkins 流水线存在之前提出的。尽管您可以继续通过 GUI 使用和配置 Jenkins,但目前建议将您的项目转换到管道。使用流水线可以跟踪对流水线的更改,并将其存储为代码,以便在需要移动 Jenkins 服务器时轻松地在任何机器上重新创建构建。

使用管道,为构建的特定部分添加超时是微不足道的。管道语法简单易用。

timeout(time:5, unit:'DAYS') {
    input message:'Approve deployment?', submitter: 'it-ops'
}

相关问题:如何向 Jenkins Pipeline 添加超时步骤

示例无耻取自:CloudBees Jenkins Pipeline Plugin 的 10 大最佳实践

于 2018-05-23T12:50:08.617 回答
7

构建超时插件不适用于管道。参考维基

对于管道超时,请尝试以下操作:

timeout(time: 30, unit: 'MINUTES') {
  node {
    sh 'foo'
  }
}

另一个线程的类似答案: 如何向 Jenkins Pipeline 添加超时步骤

于 2018-07-12T09:20:25.383 回答
6

我不知道没有这样的功能。JENKINS-8900请求它。

于 2013-03-19T13:19:48.263 回答
4

请为您的 Jenkins 安装 Build Timeout 插件。

Jenkins> 管理 Jenkins> 管理插件

在可用选项卡中搜索 Build Timeout .. 安装它。你会在构建环境中找到它作为“如果它被卡住则中止构建”。设置超时策略和时间。绝对截止日期 Elastic 可能没有活动

就我而言,我使用了无活动。

希望能帮助到你。

于 2019-11-15T10:32:11.633 回答
3

我认为timeout来自 GNU coreutils 的命令可能是你想要的。这是假设您的构建步骤是脚本。

于 2016-04-04T18:38:42.237 回答
2

最简单的方法(这就是我正在这样做的方式)是实际上让不同的项目相互依赖并连续构建它们。它并不完美,但另一种选择是使用不同的工具/构建行为监视不同插件的执行。

尽管如此,这种方法仍然有效,尽管它确实很糟糕......

顺便说一句,有一个不错的插件可以帮助您使用一组项目 -构建管道插件。我现在正在使用它来可视化和验证我创建的管道。真的很方便。。。

于 2012-09-02T09:59:38.917 回答
2

如果您不想使用 Jenkins 插件并且想要使脚本或任何命令超时,那么您可以使用 Linux 内置实用程序“超时”。

timeout -s KILL 1m ./test

上述命令将运行test1 分钟,如果它在超时后继续执行,则该命令将超时并通过KILL实用程序终止进程。

于 2018-05-02T05:59:44.193 回答