ひとメモ

主にプログラミングのメモ

DockerアプリのHerokuへのデプロイをGitLab CIを使って自動化する

GitHubにpushするだけでHerokuにデプロイできるようになった

Dockerでwebアプリを作成し、それをHerokuにデプロイする際

$heroku container:push web
$heroku container:release web

という感じで、手元でビルドしたイメージをHerokuのContainer Registryにpushしていました。(公式ドキュメント

それだと時間がかかるのと、CI(Continuous Integration:継続的インテグレーション)というのを使ってみたかったので、GitLab CIを試しました。

その結果Git Hubにgit pushするだけで、修正した部分が自動的に反映されるようになりました。便利〜。

なお時間は同じかそれ以上にかかります。
でもPCつけたまま待たなくて大丈夫なのが良い。

関連記事 hwhw.hatenablog.com

手順

※Dockerfile等の説明は割愛します。

  • GitLabのアカウントを作成→GitHubと連携

  • プロジェクトのルート直下に.gitlab-ci.ymlというファイルを作成

  • HerokuのAccount Settings(アプリのSettingsじゃなくて画面右上の)でAPI Keyを取得

  • GitLabのSettings > CI/CD > Variablesで環境変数を設定

    • HEROKU_TOKEN = 上記のHeroku API Key
    • HEROKU_APP = Herokuのアプリ名
  • GitHubにpush → 自動でデプロイ!嬉しい!

.gitlab-ci.yml

そのままコピペで多分動きます。詳しく解説できるほど理解はしてない…。

push-heroku:
  only:
    - master
  image: docker:stable
  services:
    - docker:dind
  script:
    - echo $HEROKU_TOKEN | docker login --username=_ --password-stdin registry.heroku.com
    - docker build -t registry.heroku.com/$HEROKU_APP/web .
    - docker push registry.heroku.com/$HEROKU_APP/web

    - docker run --rm -e HEROKU_API_KEY=$HEROKU_TOKEN wingrunr21/alpine-heroku-cli container:release web --app $HEROKU_APP

参考リンク

ほぼQiita記事のymlファイルまんまですが、それだけだとheroku container:release webの部分が自動でできなかったのでもう一つのリンクを参考に全自動にしました。

HerokuのContainer RegistryベースのデプロイをGitLab-CI上で行う - Qiita

Release container to heroku with Gitlab.ci - Qrated - Medium