質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

受付中

CircleCI+Docker+Herokuでのデプロイがうまくいかない

mrsekut
mrsekut

総合スコア0

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

0回答

0評価

4クリップ

4260閲覧

投稿2018/07/09 07:24

編集2022/01/12 10:55

初めてCI環境を作っています。
プログラミング歴は約2年ですが、バックエンドの知識はあまりなく、Dockerは使ったことはありますが、コマンドのオプションなどはしっかり理解していないレベルです。

概要

CircleCI + Docker + Herokuの組み合わせで「githubにpushされたら自動でHerokuにリリースする」という環境を作ろうとしているのですがうまくいきません。
CircleCIの設定ファイルを作り、githubにpushするとちゃんと実行され、
docker pushまで正常に終わるのですが、Heroku側では何も更新されません。
エラーも表示されないので、困っています。

以下でもう少し詳しく書きます。

したいこと

以下のように実行されるCI環境を作りたいと思っています。

前提として、flaskを実行するためのdockerfileがプロジェクト内に用意されています。

  1. githubのdevelopブランチにpush
  2. circleCIがそれを検知し、テストコードを実行
  3. テストに通れば、circleCI上で、checkout master -> merge -> push
  4. その後herokuにdeploy&release

手順3まではうまく行っています。

詰まっているところ

以下、私のプロジェクトの名前をhoge-projectとします。
このサイトなどを参考にし、CircleCI上からHerokuへDockerコンテナをpushする処理を書きました。
環境変数などもCircleCI上でちゃんと設定してあります。

config.yml

deploy: machine: image: 'circleci/classic:edge' steps: - checkout - run: name: pull and push command: | git pull origin develop git checkout master git merge develop git push origin master - run: name: Heroku command: | docker login --username=$HEROKU_EMAIL --password=$HEROKU_API_KEY registry.heroku.com docker build --rm=false -t registry.heroku.com/hoge-project/web . docker push registry.heroku.com/hoge-project/web:latest

すると、CircleCI上では、ながながとDockerのビルド(?)のログが出て、

Step 21/21 : CMD flask run -h 0.0.0.0 -p $PORT ---> Running in fb7574e3d053 ---> 05c9c8397695 Successfully built 05c9c8397695 Successfully tagged registry.heroku.com/hoge-project/web:latest The push refers to a repository [registry.heroku.com/hoge-project/web]

のようにして、処理が終わります。
上に貼り付けたのは、約9000行あるログの最後の6行です。
このようにCircleCI上では正常に終了しているように見えるのですが、Herokuにいってみると、何も変わっていません。
エラーログもないので、対策を調べようがない状態です。

ちなみに、今はHeroku上でのGithubとの連携はしていません。

このサイトこのサイトこのサイトなどを参考にすると、
circleCI上でdocker push registry.heroku.com/hoge-project/webのようなコマンドを実行すると、
pushもreleaseもしてくれるよという感じに読めますが、
2018/5/29に更新されたHerokuのドキュメントを見ると、docker push registry.heroku.comコマンドは今までは、pushreleaseも包含していたけど、それを分離したよとあります。

ですので**docker pushしたあとに、何かしらreleaseするためのコマンドを実行しなければいけないと**思うのですが、
例えばcircleci上でheroku container:release webというコマンドを実行させようとすると、

Login Succeeded ▸ container:release is not a heroku command. ▸ Perhaps you meant container:rm ▸ Run heroku help container for a list of available ▸ commands. Exited with code 127

と出て、ローカルでは動くcontainer:releaseなんてコマンドはないと怒られます。

このページを見てみると以下のように書いてありました。

heroku container:release, which creates a Heroku-compatible slug and deploys it to Heroku, has been deprecated. For access to our container registry (available in private beta), please contact docker-feedback@heroku.com

container:releaseコマンドはなくなったのでしょうか。
後述するようにローカルではこのコマンドは問題なく使えます。
なぜ、circleci上では使えないのでしょうか。

docker pushしたあとになにかしらreleaseするための設定やコマンドの実行が必要だと思われるのですが、公式ドキュメントやブログなどを見てもそれに該当するものを見つけられなくて困っています。

余談

ちなみにcircleCIを抜きにした「Docker + Heroku + Flask」でローカルで実行したときはうまく行っています。
$ heroku container:login
$ heroku container:push --app hoge-project web
$ heroku container:release web

これを実行するとうまくデプロイされ、Herokuのサイト上のActivityの欄でも更新されたことが見受けられます。

$ heroku openでflaskで作ったサイトをウェブ上で閲覧できます。

ながながと長文失礼しました。
どなたかがご存知の方がいらっしゃればご教示願えませんでしょうか。
よろしくおねがいします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。