关于Rails:在CircleCI配置文件中安装一组特定的gem

Install a specific set of gems in a CircleCI configuration file

我正在尝试构建一个CircleCI配置文件,该文件仅通过环境参数安装一组特定的gem。在这种情况下,我们将该环境称为continuous_integration,并且该环境与test环境匹配。到目前为止,我已经尝试了许多方法,这是我当前在此峰值中的配置。

有人能指出我正确的方向吗?这可能吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
machine:
  timezone:
    America/Los_Angeles
  ruby:
    version:
      2.4.1
  services:
    - redis
  environment:
    RAILS_ENV: continous_integration

database:
  override:
    - bundle exec RAILS_ENV=continous_integration rake db:drop
    - bundle exec RAILS_ENV=continous_integration rake db:setup

dependencies:
  pre:
    - gem install bundler
  override:
    - bundle install:
        timeout: 180
        environment:
          RAILS_ENV: continous_integration

test:
  override:
    - bundle exec RAILS_ENV=continous_integration rspec


该解决方案仅适用于1.0左右的版本。

根据我目前的研究,我不得不验证continous_integration环境
在机密信息,环境文件夹,gem等内部的整个Rails中已正确设置。事实证明,我发现bundler没有使用ENV设置,因此我正在使用以下配置来强制缓存gem,速度建立过程,并使用continous_integration环境。

参考文献

  • CircleCIruby缓存
  • https://github.com/sj26/rspec_junit_formatter/issues/50#issuecomment-312787281

.rspec

1
2
3
--color
--require spec_helper
--format documentation

.circle.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
machine:
  timezone:
    America/Los_Angeles
  ruby:
    version:
      2.4.1
  services:
    - redis

dependencies:
  pre:
    - gem install bundler
    - gem update bundler
  override:
    - bundle config without development:test
    - bundle check --path=vendor/bundle || bundle install --without development test --path=vendor/bundle --jobs=4 --retry=3:
        timeout: 180

database:
  override:
    - RAILS_ENV=continous_integration bundle exec rake db:drop
    - RAILS_ENV=continous_integration bundle exec rake db:setup

test:
  override:
    - RAILS_ENV=continous_integration bundle exec rspec --format RspecJunitFormatter -o $CIRCLE_TEST_REPORTS/rspec.xml
  post:
    - gem install brakeman
    - gem install rubocop
    - gem install rubocop-rspec
    - RAILS_ENV=continous_integration bundle exec rubocop --format fuubar --require rubocop-rspec --config .rubocop.yml
    - RAILS_ENV=continous_integration brakeman -z

ruby文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
group :development do
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'spring-commands-rspec'
  gem 'spring-commands-rubocop'
end

group :development, :test do
  gem 'pry-rails'
  gem 'pry-nav'
  gem 'pry-clipboard'
  gem 'pry-rescue'
  gem 'table_print'
  gem 'awesome_print'
  gem 'guard-rake'
  gem 'guard-rspec'
end

group :development, :test, :continous_integration do
  gem 'brakeman', require: false
  gem 'rubocop', require: false
  gem 'rubocop-rspec', require: false
  gem 'timecop'
  gem 'mail_safe'
  gem 'dotenv-rails'
  gem 'factory_girl_rails'
  gem 'faker', '~> 1.6.6'
end

group :test, :continous_integration do
  gem 'simplecov'
  gem 'database_cleaner'
  gem 'rspec-rails'
  gem 'json_spec'
  gem 'json-schema'
  gem 'json_matchers'
  gem 'shoulda-matchers'
  gem 'nyan-cat-formatter'
  gem 'rspec_junit_formatter', '~> 0.3.0.pre6'
  gem 'webmock'
  gem 'vcr'
end

此设置也会在Circle CI中产生正确的错误输出

enter image description here