如何在 CircleCI 执行 parallel_test 时合并多个 simplecov 目录?

5
我可以帮助你翻译这段内容。这是关于 IT 技术的内容。

我有一个使用 Rails 应用程序,在 CircleCI 中并行运行 rspec 的应用程序。

在网上寻找资料后,我将以下内容添加到我的 spec_helper.rb 文件的开头:

if ENV['COVERAGE']
  require 'simplecov'
  # on circleci change the output dir to the artifacts
  if ENV['CIRCLE_ARTIFACTS']
    dir = File.join("..", "..", "..", ENV['CIRCLE_ARTIFACTS'], "coverage")
    SimpleCov.coverage_dir(dir)
    SimpleCov.merge_timeout 3600
    SimpleCov.command_name "rspec_#{Process.pid.to_s}#{ENV['TEST_ENV_NUMBER']}"
  end
  SimpleCov.start 'rails'
end

问题在于,由于每个CircleCI实例的不同,我得到了不同的文件夹:

enter image description here

我做错了什么?

有没有在 CircleCI 工作的人? - fabrizioM
不相关,但是你的circle.yml文件长什么样子?我无法让它工作 @fabrizioM - StevenNunez
3个回答

5

我在CircleCI工作。不幸的是,这样做行不通 - 直到所有构建都完成运行之后,我们才收集来自不同构建的工件目录,因此试图在构建过程中合并它们的工具将无法正常工作。我们已经讨论过添加此功能的能力,但目前它不在我们的特性路线图上,很抱歉!


这还是现状吗?我正准备通过scp实现@frank-c-eckert的解决方案... - GDorn

3
对于仍在寻找解决方案的人,现在有一个新的可能性:在容器之间使用ssh手动同步和合并报告,请参见文档。然而,这不是一个即插即用的解决方案,您需要自己编写必要的脚本。
否则,您还可以与CircleCI的通知Webhook一起使用外部覆盖率服务(我们使用coveralls codecov)。 编辑 您可以像这样在circle.yml中添加Webhook(感谢Ian): notify: webhooks: - url: https://coveralls.io/webhook?repo_token=(your repo token)

1
你能详细说明一下如何配置Coveralls与Circle的Webhooks配合工作吗? - Nader
在https://coveralls.zendesk.com/hc/en-us/articles/203484329-Parallel-Build-Webhook找到了这个信息。 - Ian E

1
为了进一步解释Frank Eckert所说的,Coveralls可以做到这一点。然而,那份文档略有偏差。
在你的Gemfile中添加:
gem 'coveralls', require: false

在你的spec/spec_helper.rb文件中添加:
if ENV['CIRCLECI']
  # If running in CircleCI, run with Coveralls too
  require 'coveralls'
  Coveralls.wear!('rails')
end

将以下内容添加到您的circle.yml文件中(不是像文章中所述的coveralls.yml文件):

notify:
  webhooks:
    - url: https://coveralls.io/webhook?repo_token=your-repo-token

在根目录下添加(或创建).coveralls.yml文件,并添加以下内容:
repo_token: your-repo-token

最后,进入CircleCI项目配置并添加一个环境变量:COVERALLS_PARALLEL=true

这对我们很有效,但我们发现行数计算上有错误(报告给Coveralls),但它能够工作并且让我们清楚地了解我们的覆盖率随时间的变化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接