标题基本上说明了一切 - 我想检测测试是在本地机器上运行还是在CI中运行? (所以我可以重新运行测试,以防它因CI中的某些原因而失败。)
答案 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 Pipelines 将 TF_BUILD
设置为 true
- docs。
竹套bamboo.buildKey
- docs。
Buildkite 将 BUILDKITE
设置为 true
- docs。
Circle CI 将 CIRCLECI
设置为 true
- docs。
Cirrus CI 将 CIRRUS_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 CI 将 TRAVIS
设置为 true
- docs。
此外,Circle CI、GitLab CI、Heroku 和 Travis CI 等一些系统设置了通用变量“BUILD_ID”、“CI”等。 这些旨在作为检测您是否在 CI 环境中运行的提供者不可知的方式,但这个习语似乎没有被广泛采用,所以我不会依赖它。