5

我有一个 rails 应用程序,它在 circleci 内使用 rspec 运行 parallel_test

在互联网上环顾四周,我将其添加到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 实例获得了不同的文件夹:

在此处输入图像描述

我究竟做错了什么 ?

4

3 回答 3

5

我在 CircleCI 工作。不幸的是,这是行不通的——在所有构建完成运行之前,我们不会从不同的构建中收集工件目录,因此在构建过程中尝试将它们合并在一起的工具将不起作用。我们已经讨论过添加功能来执行此操作,但目前不在我们的功能路线图中,抱歉!

于 2014-11-07T21:05:18.147 回答
3

对于仍在寻找此问题的解决方案的任何人,有一种新的可能性:在容器之间使用 ssh 手动同步和合并报告,请参阅文档。但是,这不是一个交钥匙解决方案,您必须自己编写必要的脚本。

否则,您还可以将外部覆盖服务(我们使用工作服 codecov)与 CircleCI 的通知 webhook一起使用。

编辑

您可以在 circle.yml 中添加这样的 webhook(感谢 Ian): notify: webhooks: - url: https://coveralls.io/webhook?repo_token=(your repo token)

于 2015-07-27T13:15:20.693 回答
1

为了解释弗兰克埃克特所说的,工作服可以做到这一点。但是,该文档略有不同。

加你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根文件夹中的 a,并添加:

repo_token: your-repo-token

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

这对我们有用,但是我们在正确的行数中发现了错误(报告给 Coveralls),但它正在工作,并让我们对我们的覆盖范围随时间变化有一个很好的了解。

于 2016-01-07T18:59:58.493 回答