#前提
CircleCI初心者です。
Rails 6.0.3.1
ruby 2.6.3
Bundler version 2.1.4
以下の記事を参照して、githubと連携しオリジナルアプリにcircleCIを導入しようとしていました。
【circleCI】Railsアプリでgithubと連携してrubocopとrspecテストを走らせる
すると以下のエラーが、、、
#!/bin/bash -eo pipefail
bundle -v
Traceback (most recent call last):
2: from /usr/local/bin/bundle:23:in `<main>'
1: from /usr/local/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
/usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.1.4) required by your /home/circleci/project/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.1.4`
Exited with code exit status 1
CircleCI received exit code 1
とりあえず、.circleci/config.yml
の中身をみてみる。
version: 2.1
orbs:
ruby: circleci/ruby@0.1.2
jobs:
build:
docker:
- image: circleci/ruby:2.6.3-stretch-node
executor: ruby/default
steps:
- checkout
- run:
name: Which bundler?
command: bundle -v
- ruby/bundle-install
あれ、docker
ブランチで設定した内容と違う....
きちんとmergeしていなかった。
凡ミス。
きちんと書き直してから、再度
Set Up Priject
→Start Building
してみる!
ちなみに、config.yml
の書き方は以下の記事を参考にさせていただきました。
既存のRails6アプリをDocker化しつつCircleCIでシステムスペックも実行できる環境を作る
version: 2
jobs:
build:
working_directory: ~/my-app
docker:
- image: circleci/ruby:2.6.3-node-browsers
environment:
BUNDLE_RETRY: 3
BUNDLE_PATH: vendor/bundle
BUNDLER_VERSION: 2.1.4
DATABASE_URL: postgres://postgres:password@localhost:5432/myapp_test
RAILS_ENV: test
- image: circleci/postgres:11-alpine
steps:
- checkout
- restore_cache:
keys:
- my-app-bundle-v1-{{ checksum "Gemfile.lock" }}
- my-app-bundle-v1-
- run:
name: Bundler install
command: |
gem update --system
gem install bundler -v 2.1.4
- run:
name: Bundle Install
command: bundle check || bundle install
- save_cache:
key: my-app-bundle-v1-{{ checksum "Gemfile.lock" }}
paths:
- vendor/bundle
- restore_cache:
keys:
- rails-demo-yarn-{{ checksum "yarn.lock" }}
- rails-demo-yarn-
- run:
name: Yarnをinstall
command: yarn install --cache-folder ~/.cache/yarn
- run:
name: Wait for DB
command: dockerize -wait tcp://127.0.0.1:5432 -timeout 1m
- run:
name: Database setup
command: bin/rails db:create db:schema:load --trace
- run: bundle exec bin/webpack
- run:
name: execute rspec
command: bundle exec rspec
- store_test_results:
path: /tmp/test-results
注意点としては、**bundle2.0.1以上
であるとbundle installに失敗するみたいなので、環境に明示的に指定する必要がある。
以下抜粋。
# 省略
docker:
- image: circleci/ruby:2.6.3-node-browsers
environment:
BUNDLE_RETRY: 3
BUNDLE_PATH: vendor/bundle
#バージョン指定する
BUNDLER_VERSION: 2.1.4
DATABASE_URL: postgres://postgres:password@localhost:5432/myapp_test
RAILS_ENV: test
#省略
それに伴い牡蠣でもバージョンを指定する
- run:
name: Bundler install
command: |
gem update --system
gem install bundler -v 2.1.4
上記で無事Success
になりました。
参考記事
[CircleCI] "You must use Bundler 2 or greater with this lockfile."というエラー
【circleCI】Railsアプリでgithubと連携してrubocopとrspecテストを走らせる
【CircleCI】CircleCI 2.0からはじめる個人での簡単なCI導入方法 - githubとの連携まで