GitLab CI 管道阶段超时

Posted

技术标签:

【中文标题】GitLab CI 管道阶段超时【英文标题】:GitLab CI Pipeline Stage Timeout 【发布时间】:2016-11-19 02:39:41 【问题描述】:

我正在使用自托管GitLab CI server(社区版v8.9.5)和gitlab-ci-multi-runner1.2.0 来构建项目。我的一个管道阶段(测试)需要一段时间才能运行,我得到以下 erm:

ERROR: Build failed: execution took longer than 3600 seconds

我应该把这个超时的覆盖放在哪里?我可以将其仅应用于测试管道阶段吗?

【问题讨论】:

【参考方案1】:

您可以在 “项目设置 -> CI/CD 管道 -> 超时”“项目设置 -> 构建 -> 超时” 中设置全局超时版本。

从 12.3 版开始,您可以使用 timeout 在 CI .yml 文件中设置每个阶段的超时时间:

timeout 允许您为特定作业配置超时。例如:

build:
  script: build.sh
  timeout: 3 hours 30 minutes

test:
  script: rspec
  timeout: 3h 30m

作业级超时可以超过项目级超时,但不能超过 Runner 特定超时。

【讨论】:

至少从 8.11.5 开始,此设置可以在 Project settings -> CI/CD Pipeline -> Timeout 中找到 本地运行gitlab-runner时可以设置超时时间吗? @damian 我会说跑步者在哪里跑步无关紧要,但不要相信我的话。 Issue for per job timeouts【参考方案2】:

可以设置两种超时时间:project timeoutrunner timeout

项目超时:

可以通过设置 -> CI/CD -> 常规管道

设置每个作业的超时时间

跑步者超时:

runner的超时时间可以从Settings -> CI/CD -> Runners中设置,从Runners激活的选择runners这个项目并从运行器编辑表单中编辑最大作业超时

请注意,这两种类型的超时可以相互覆盖。参考docs。

【讨论】:

如果我在本地运行它,我会收到此错误。 ERROR: Job failed: execution took longer than 30m0s seconds FATAL: execution took longer than 30m0s seconds 。我已经在 toml 文件中设置了 1 小时的 timwout。让我知道可能是什么问题 也许同时检查项目超时和运行超时? @shaktisinghmoyal 我尝试了项目超时和跑步者超时。但是在本地运行时,gitlab 方面有很多限制。为我解决的解决方案是,如果您在本地运行,则使用命令gitlab-runner exec docker job_name --timeout 3600 使用类似这样的参数传递运行器超时【参考方案3】:

Gitlab 12.3 中引入了特定于作业的超时

https://docs.gitlab.com/ce/ci/yaml/README.html#timeout

build:
  script: build.sh
  timeout: 3 hours 30 minutes

test:
  script: rspec
  timeout: 3h 30m

【讨论】:

如果我在本地运行它会收到此错误。 ERROR: Job failed: execution took longer than 30m0s seconds FATAL: execution took longer than 30m0s seconds 。我已经在 toml 文件中设置了 1 小时的 timwout。让我知道可能是什么问题 @shaktisinghmoyal 我想你现在已经想通了,但是还有一个项目最大超时和一个 gitlab 运行器最大超时需要由 gitlab 管理员配置。【参考方案4】:

如果在 Gitlab 上运行它,那么上述答案已经告诉了正确的方法。但是,如果您也想在本地运行 Gitlab CI 并使用自己的跑步者,那么跑步者超时,您需要使用命令传递。

gitlab-runner exec docker job_name --timeout 3600

这里将跑步者超时设置为 3600 秒

【讨论】:

以上是关于GitLab CI 管道阶段超时的主要内容,如果未能解决你的问题,请参考以下文章

在部署阶段发布 CI GitLab

在 Gitlab 管道中的条件手动阶段之后运行阶段

.gitlab-ci.yml配置参数

gitlab ci:sbt 在每个阶段重新编译

如何使用 CodeceptJS 在 GitLab CI 中实现自动测试阶段?

Gitlab CI/CD 如何在管道中捕获 curl 响应