前提
Circleciでdockerをビルドしています。
しかし.circleci/config.yml
ファイル内で設定したワーキングディレクトリの内容がdocker-compose build
した際にマウントされず困っています。
発生している問題・エラーメッセージ
.circleci/config.yml
内で以下のコマンドを実行する際、ホストディレクトリがマウントされていないので、エラーが出てしまいます。
yml
1- run: 2 name: Build and test 3 command: | 4 docker-compose build --quiet --no-cache 5 docker-compose run web bash -c "ls && bundle exec rails db:create"
^@^@Could not locate Gemfile or .bundle/ directory
該当のソースコード
.circleci/config.yml
yml
1version: 2.1 2 3orbs: 4 ruby: circleci/ruby@2.0.1 5 node: circleci/node@5.1.0 6 7# このプロジェクトで実行するジョブの定義 8jobs: 9 build-and-test: 10 docker: 11 - image: cimg/ruby:3.2.1-browsers 12 environment: 13 MYSQL_ROOT_HOST: db 14 MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} 15 - image: circleci/mysql:5.7 16 working_directory: ~/repo 17 steps: 18 - checkout 19 - setup_remote_docker 20 - restore_cache: 21 keys: 22 - v1-dependencies-{{ checksum "Gemfile.lock" }} 23 - v1-dependencies-{{ checksum "yarn.lock" }} 24 - v1-dependencies- 25 - run: 26 name: Bundle install 27 command: | 28 bundle install --path ./vendor/bundle 29 - save_cache: 30 paths: 31 - ./vendor/bundle 32 key: v1-dependencies-{{ checksum "Gemfile.lock" }} 33 - run: 34 name: Build and test 35 command: | 36 docker-compose build --quiet --no-cache 37 38 #この部分でエラーが発生 39 docker-compose run web bundle exec rails db:create 40 docker-compose run web bundle exec rails db:migrate 41 docker-compose run web yarn install --check-files 42 docker-compose run web bundle exec rails webpacker:compile 43 docker-compose run web bundle exec rspec 44 - save_cache: 45 paths: 46 - ./node_modules 47 key: v1-dependencies-{{ checksum "yarn.lock" }} 48 49workflows: 50 build-and-test: 51 jobs: 52 - build-and-test 53
Dockerfile
FROM ruby:3.2.1 ENV LANG=ja_JP.UTF-8 ENV TZ=Asia/Tokyo ENV APP_ROOT /myapp #node.js,apt-transport-https,wgetをインストール RUN apt-get update -qq && apt-get install -y nodejs npm \ && npm install --global yarn RUN apt-get clean RUN rm -rf /var/lib/apt/lists/* WORKDIR $APP_ROOT ADD Gemfile $APP_ROOT ADD Gemfile.lock $APP_ROOT RUN \ gem install bundler:2.4.8 && \ bundle install && \ rm -rf ~/.gem COPY . $APP_ROOT RUN yarn install --check-files RUN bundle exec rails webpacker:compile COPY ./entrypoint.sh /usr/bin RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
yml
1version: '3' 2 3services: 4 db: 5 image: mysql:5.7 6 volumes: 7 - to_do_app_data:/var/lib/mysql 8 environment: 9 MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}" 10 ports: 11 - 3306:3306 12 web: 13 container_name: to_do_app 14 build: . 15 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 16 volumes: 17 - .:/myapp 18 ports: 19 - "3000:3000" 20 depends_on: 21 - db 22volumes: 23 to_do_app_data: 24
config/database.yml
yml
1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: <%= ENV['DB_PASSWORD'] %> 7 host: db
.env
DB_PASSWORD=password
試したこと
・ブラウザのCircleciのEnvironment ValiablesにはDB_PASSSWORDを設定しています。
・ローカル環境では.circleci/config.ymlファイル内の以下のコマンドは正常に実行できました。
docker-compose run web bundle exec rails db:create
・こちらの記事に、ホストボリュームを使用していることが問題とあったのですが、どのように修正したら良いのかが分かりませんでした。
・デバッグでファイルの存在を検証しました。
- run: name: Build and test command: | pwd ls docker-compose build --quiet docker-compose run web bash -c "ls" #ファイルが存在しなかった。 docker-compose run web bundle exec rails db:create
結果
/home/circleci/repo app Dockerfile package-lock.json tmp babel.config.js entrypoint.sh postcss.config.js to_do.dio bin Gemfile public vendor config Gemfile.lock Rakefile yarn.lock config.ru lib README.md db log spec docker-compose.yml package.json storage
どなたか分かる方がいらっしゃいましたら、教えていただけると嬉しいです。
補足情報(FW/ツールのバージョンなど)
ruby 3.2.1
rails 6.1.7.3
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。