質問内容
自作のRailsアプリを使ってCircleCIでRspecを走らせようとしたところ、エラーが発生してしまいました。
はじめは「bundlerのバージョンが2以上でないといけない」というエラーだったので
・環境変数にbundlerのバージョンを2.1.4に設定
・bundlerを一旦アンインストールしてから、再度指定のバージョンを入れ直すコマンドをconfig.ymlに追加
上記2点を行いましたが、以下のエラーコードが新たに出てしまいました。
アドバイスいただければ幸いです。よろしくお願いいたします。
開発環境
Ruby 2.5.1
Rails 5.2.4.3
Docker
エラーコード
console
1~@yk golfour_aws % circleci local execute 2・・・ 3====>> setup bundler 4 #!/bin/bash -eo pipefail 5sudo gem update --system sudo gem uninstall bundler sudo rm /usr/local/bin/bundle sudo rm /usr/local/bin/bundler sudo gem install bundler 6ERROR: While executing gem ... (ArgumentError) 7 Malformed version number string sudo 8Error: 9Exited with code exit status 1 10 11Step failed 12Error: runner failed (exited with 101) 13Task failed 14Error: task failed
参照ファイル
.config/config.yml
version: 2.1 orbs: ruby: circleci/ruby@1.1.0 jobs: build: docker: - image: circleci/ruby:2.5.1-node-browsers steps: - checkout - run: name: setup bundler command: sudo gem update --system sudo gem uninstall bundler sudo rm /usr/local/bin/bundle sudo rm /usr/local/bin/bundler sudo gem install bundler - ruby/install-deps test: parallelism: 3 docker: - image: circleci/ruby:2.5.1-node-browsers environment: DB_HOST: 127.0.0.1 RAILS_ENV: test BUNDLER_VERSION: 2.1.4 - image: circleci/mysql:8.0 command: --default-authentication-plugin=mysql_native_password environment: MYSQL_USER: yuki MYSQL_DB: golfour_test steps: - checkout - run: name: setup bundler command: sudo gem update --system sudo gem uninstall bundler sudo rm /usr/local/bin/bundle sudo rm /usr/local/bin/bundler sudo gem install bundler - ruby/install-deps - run: name: Wait for DB command: dockerize -wait tcp://localhost:3306 -timeout 1m - run: name: Database setup command: bundle exec rails db:schema:load --trace # Run rspec in parallel - ruby/rspec-test - ruby/rubocop-check workflows: version: 2 build_and_test: jobs: - build - test: requires: - build
docker-compose.yml
version: '3' services: db: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: golfour_development MYSQL_USER: yuki MYSQL_PASSWORD: password TZ: Asia/Tokyo volumes: - ./mysql/mysql_data:/var/lib/mysql - ./logs:/var/log/mysql - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf ports: - "4306:3306" db-test: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: golfour_test MYSQL_USER: yuki MYSQL_PASSWORD: password TZ: Asia/Tokyo volumes: - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf tmpfs: - /var/lib/mysql - /var/log/mysql ports: - "5306:3306" web: build: context: . dockerfile: Dockerfile command: /bin/sh -c "rm -f /workdir/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" tty: true stdin_open: true environment: # RspecのSystem-specを利用するために追加 - "SELENIUM_DRIVER_URL=http://selenium_chrome:4444/wd/hub" depends_on: - db - db-test ports: - "3000:3000" volumes: - .:/workdir # RspecのSystem-specを利用するために追加 selenium_chrome: image: selenium/standalone-chrome-debug logging: driver: none
Dockerfile
FROM ruby:2.5.1 RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y mysql-client --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN mkdir /workdir WORKDIR /workdir ADD Gemfile /workdir/Gemfile ADD Gemfile.lock /workdir/Gemfile.lock ENV BUNDLER_VERSION 2.1.4 RUN gem install bundler RUN bundle install ADD . /workdir
追記
## 最初に発生したエラーメッセージ
console
1~@yk golfour_aws % circleci local execute 2・・・ 3Gemfile.lock is bundled with bundler version 2.1.4 4Installing bundler 2.1.4 5Fetching: bundler-2.1.4.gem (100%) 6Successfully installed bundler-2.1.4 71 gem installed 8/bin/bash: line 21: ./vendor/bundle: No such file or directory 9You must use Bundler 2 or greater with this lockfile. 10You must use Bundler 2 or greater with this lockfile. 11Error: 12Exited with code exit status 20 13 14Step failed
このエラーメッセージからこの記事を参考に、bundlerのバージョンを指定する方法を実装。
追記2
修正したソースコード .config/config.yml
version: 2.1 orbs: ruby: circleci/ruby@1.1.0 jobs: build: docker: - image: circleci/ruby:2.5.1-node-browsers environment: BUNDLER_VERSION: 2.1.4 #修正箇所 steps: - checkout - ruby/install-deps test: parallelism: 3 docker: - image: circleci/ruby:2.5.1-node-browsers environment: DB_HOST: 127.0.0.1 RAILS_ENV: test BUNDLER_VERSION: 2.1.4 - image: circleci/mysql:8.0 command: --default-authentication-plugin=mysql_native_password environment: MYSQL_USER: yuki MYSQL_DB: golfour_test steps: - checkout - ruby/install-deps - run: name: Wait for DB command: dockerize -wait tcp://localhost:3306 -timeout 1m - run: name: Database setup command: bundle exec rails db:schema:load --trace # Run rspec in parallel - ruby/rspec-test - ruby/rubocop-check workflows: version: 2 build_and_test: jobs: - build - test: requires: - build
回答1件
あなたの回答
tips
プレビュー