前提・実現したいこと
Railsでアプリを制作しており、今はCircle CIで自動デプロイに挑戦しております。
github上でmainにマージしたタイミングでCircle CIを動作させ、githubからpull、Railsにdb:migrate:reset、db:seedさせたいと考えております。
デプロイ動作を記述したシェルスクリプトをサーバ上にあらかじめ作成しておき、それをCircle CIに実行させたところ、途中で止まってしまいました。エラー文はToo long with no output (exceeded 10m0s): context deadline exceeded
です。
シェルスクリプトは、手動でEC2にsshログインし実行させれば問題なく動作することが確認済みです。
シェルスクリプトで止まってしまう箇所は、下に詳しく書きますが、docker-compose run ~
をする部分です。
このためCircle CIの仕様、または設定に原因があるのではないかと考えていますが、初めて触るため何をどう対処して良いか分からず質問させていただきました。
自動デプロイはhttps://qiita.com/ashketcham/items/0518322e5eca2896c0f0を参考にしました。
Railsアプリの構成
EC2上にdocker-composeをインストールし、docker-composeでRailsアプリを稼働させております。
- EC2 Linux/UNIX
- docker-compose version 1.29.2
- ruby 2.5.9
- Rails 5.2.6
- nginx 1.15.8 (webサーバ)
- unicorn 6.0.0 (アプリケーションサーバ)
- RDS MySQL8.0.23 (データベース)
- S3 (画像サーバ)
発生している問題・エラーメッセージ
Circle CI上で、ジョブの詳細画面でみることができるターミナル画面?です。
#!/bin/bash -eo pipefail ssh -p $SSH_PORT $SSH_USER@$SSH_HOST "/PhotoContestApp/deploy-me.sh" Warning: Permanently added '**********' (ECDSA) to the list of known hosts. Stopping photocontestapp_web_1 ... Stopping photocontestapp_app_1 ... Stopping photocontestapp_web_1 ... done Stopping photocontestapp_app_1 ... done Removing photocontestapp_web_1 ... Removing photocontestapp_app_1 ... Removing photocontestapp_app_1 ... done Removing photocontestapp_web_1 ... done Network app-network is external, skipping <===ここまでdocker-compose down Already up to date. <===git pull Creating photocontestapp_app_run ... <===docker-compose run 開始 Creating photocontestapp_app_run ... done <===ここで止まってしまう Too long with no output (exceeded 10m0s): context deadline exceeded
該当のソースコード
EC2上にあらかじめ作成しておいたシェルスクリプト
shellscript
1#!/bin/bash 2 3cd /PhotoContestApp/ 4docker-compose -f docker-compose.production.yml down 5sudo git pull 6docker-compose -f docker-compose.production.yml run --rm app rails db:migrate:reset db:seed DISABLE_DATABASE_ENVIRONMENT_CHECK=1 7docker-compose -f docker-compose.production.yml up -d
Railsアプリの中に作成した.circleci/config.yml
version: 2.1 orbs: ruby: circleci/ruby@0.1.2 jobs: deploy: machine: enabled: true steps: - add_ssh_keys: fingerprints: - xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx - run: ssh -p $SSH_PORT $SSH_USER@$SSH_HOST "/PhotoContestApp/deploy-me.sh" workflows: version: 2 deploy: jobs: - deploy: filters: branches: only: main
試したこと
docker-compose -f docker-compose.production.yml run --rm app rails db:migrate:reset db:seed DISABLE_DATABASE_ENVIRONMENT_CHECK=1
でなく
docker-compose -f docker-compose.production.yml run --rm app rails db:migrate
や
docker-compose -f docker-compose.production.yml run --rm app ls -la /
としてもやはり止まってしまいます。このことからdocker-compose runでコンテナが起動した後の動作が影響しているのではないかと考えます。いずれも手動での動作は確認済みです。
補足情報
docker-compose.production.yml
version: '3' services: app: build: context: . command: bundle exec unicorn -c /app/config/unicorn.rb -E production -p 3000 ports: - '3000:3000' volumes: - .:/app - public-data:/app/public - tmp-data:/app/tmp - log-data:/app/log networks: - app-network stdin_open: true tty: true environment: RAILS_ENV: production web: build: context: ./nginx_docker_production volumes: - public-data:/app/public - tmp-data:/app/tmp ports: - 80:80 depends_on: - app networks: - app-network volumes: public-data: tmp-data: log-data: db-data: networks: app-network: external: true
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/10 15:37
2021/09/11 09:52
2021/09/13 11:36
2021/09/13 22:09