如何检测rspec测试是在本地还是在Continuous Integration服务器中运行?

时间:2016-04-05 08:22:52

标签: ruby-on-rails rspec

标题基本上说明了一切 - 我想检测测试是在本地机器上运行还是在CI中运行? (所以我可以重新运行测试,以防它因CI中的某些原因而失败。)

2 个答案:

答案 0 :(得分:0)

我会尝试找出当前运行规范的主机:

require 'socket'

Socket.gethostname

我的决定基于此。

答案 1 :(得分:0)

Adam Johnson 撰写了一篇关于该主题的精彩文章:

https://adamj.eu/tech/2020/03/09/detect-if-your-tests-are-running-on-ci/

<块引用>

CI 系统设置了各种环境变量,因此如果您检查它们是否存在,您就可以判断您的代码是否在那里运行。 以下是一些可以用于最流行的 CI 系统的变量列表。 (……)

Azure PipelinesTF_BUILD 设置为 true - docs
bamboo.buildKey - docs
BuildkiteBUILDKITE 设置为 true - docs
Circle CICIRCLECI 设置为 true - docs
Cirrus CICIRRUS_CI 设置为 true - docs
CodeBuild 设置 CODEBUILD_BUILD_ID - docs
GitHub 操作GITHUB_ACTIONS 设置为 true - docs
GitLab CI 设置 GITLAB_CI - docs
Heroku CI 设置 HEROKU_TEST_RUN_ID - docs
Hudson 设置 BUILD_ID - docs
Jenkins 设置 BUILD_ID - docs
TeamCity 设置 TEAMCITY_VERSION - docs
Travis CITRAVIS 设置为 true - docs

<块引用>

此外,Circle CIGitLab CIHerokuTravis CI 等一些系统设置了通用变量“BUILD_ID”、“CI”等。 这些旨在作为检测您是否在 CI 环境中运行的提供者不可知的方式,但这个习语似乎没有被广泛采用,所以我不会依赖它。