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