LoginSignup
2
0

More than 1 year has passed since last update.

CircleCI Herokuへのデプロイ時に'No images to push'エラーが出る場合の解決方法

Posted at

概要

CircleCIでHerokuへのデプロイを実行した際、イメージが見つからないというエラーが発生した。
解決方法についてメモ。

エラー内容抜粋
#!/bin/bash -eo pipefail
heroku container:push web -a $HEROKU_APP_NAME
 ▸    No images to push


Exited with code exit status 1
CircleCI received exit code 1

環境

ruby 3.0.2
rails 6.1.4
rspec-rails 5.1.2
CircleCI 2.1

先に結論

デプロイ対象ディレクトリにDockerfileが含まれるようにする。

.circleci/config.yml
version: 2.1
orbs:
  ruby: circleci/ruby@1.4.0
  browser-tools: circleci/browser-tools@1.4.0
  heroku: circleci/heroku@1.2.3
jobs:
  build:
    docker:
      - image: cimg/ruby:3.0.2-browsers
        environment:
          APP_BUNDLER_VERSION: 2.1.4
    working_directory: ~/my-app
    steps:
      - checkout:
          path: ~/my-app
      - ruby/install-deps
  test:
    docker:
      - image: cimg/ruby:3.0.2-browsers
      - image: circleci/mysql:8.0
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: my_app_test
    environment:
      BUNDLE_JOBS: "3"
      BUNDLE_RETRY: "3"
      APP_DATABASE_HOST: "127.0.0.1"
      RAILS_ENV: test
    working_directory: ~/my-app
    steps:
      - browser-tools/install-chrome
      - browser-tools/install-chromedriver    
      - checkout:
          path: ~/my-app
      - ruby/install-deps
      - run:
          name: Database setup
          command: bundle exec rails db:migrate
      - run:
          name: yarn install
          command: yarn install
      - run:
          name: run webpack
          command: bundle exec bin/webpack
      - run:
          name: run rubocop
          command: bundle exec rubocop
      - run:
          name: run rspec
          command: bundle exec rspec spec/
  deploy:
    docker:
      - image: cimg/ruby:3.0.2-browsers
    steps:
      # Dockerfileが含まれるディレクトリを指定
      - checkout 
      - setup_remote_docker:
          version: 19.03.13
      - heroku/install
      - run:
          name: heroku login
          command: heroku container:login
      - run:
          name: push docker image
          command: heroku container:push web -a $HEROKU_APP_NAME
      - run:
          name: release docker image
          command: heroku container:release web -a $HEROKU_APP_NAME
      - run:
          name: Database setup
          command: heroku run bundle exec rails db:migrate RAILS_ENV=production -a $HEROKU_APP_NAME
workflows:
  version: 2
  build_test_and_deploy:
    jobs:
      - build
      - test:
          requires:
            - build
      - deploy:
          requires:
          - test
          filters:
            branches:
              only: master

エラーの発生〜解決までに試したこと

最初の実行

.circleci/config.yml
# 関連箇所のみ抜粋
  deploy:
    docker:
      - image: cimg/ruby:3.0.2-browsers
    steps:
      - checkout:
          path: ~/my-app
      - setup_remote_docker:
          version: 19.03.13

エラーが発生。
image.png

CircleCIを使用しないで手動でデプロイ

ターミナル上でコマンドを実行

heroku container:login
heroku container:push web -a $HEROKU_APP_NAME

こちらでは問題なくデプロイできた。

config.ymlでのデプロイ設定と、手動でのデプロイの違いは何か?
→参照しているディレクトリ(にDockerfileがあるか無いか)。

最終

イメージをビルドして Container Registry にプッシュするには、ディレクトリに Dockerfile が含まれていることを確認し、次のように実行します。
heroku container:push

対象にDockerfileを含めるよう、checkoutの記述を変更(pathの指定を削除)

.circleci/config.yml
# 修正後
  deploy:
    docker:
      - image: cimg/ruby:3.0.2-browsers
    steps:
      - checkout
      - setup_remote_docker:
          version: 19.03.13

これにより、最終的な.circleci/config.ymlはこちらの通りとなり、正常にデプロイできた。

最後に

より良い方法や間違い等ありましたらご指摘いただけますと幸いです!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0