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

# 概要
CircleCIでHerokuへのデプロイを実行した際、イメージが見つからないというエラーが発生した。
解決方法についてメモ。
```bash:エラー内容抜粋
#!/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が含まれるようにする。

```yml:.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
```



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

## 最初の実行
```yml:.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948830/1d2d2ac9-13c2-102a-ff67-c47f8e887168.png)

## CircleCIを使用しないで手動でデプロイ
ターミナル上でコマンドを実行
```zsh
heroku container:login
heroku container:push web -a $HEROKU_APP_NAME
```
こちらでは問題なくデプロイできた。

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

## 最終

https://devcenter.heroku.com/ja/articles/container-registry-and-runtime

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

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

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

これにより、最終的な.circleci/config.ymlは[こちら](#先に結論)の通りとなり、正常にデプロイできた。


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