Azure DevOps Pipelines で Go の Docker コンテナを Heroku に継続的デプロイする
フロント部分は Nuxt.js で作っているアプリですが、バックエンドのAPIは Heroku にデプロイすることにしました。
どうせなら Firebase にデプロイしたかったのですが Firebase Function はまだ Go や Docker に対応していません。残念です。
実装方法
Heroku
Rails アプリを動かす PaaS と思ってましたがいつの間にか Docker コンテナを動かせるようになってました。
コンテナを動かすための手順はこのあたりにあります。
Container Registry & Runtime (Docker Deploys) | Heroku Dev Center
Dockerfile を書く上での制約がいくつかあるので気をつけたいところです。
引っかかりそうな部分は下記2点あたりです。
The web process must listen for HTTP traffic on
$PORT, which is set by Heroku.EXPOSEinDockerfileis not respected, but can be used for local testing. Only HTTP requests are supported.
(意訳)EXPOSE は無視します。$PORT にトラフィックを流すのでよろしくね。
CMDis required. IfCMDis missing, the registry will return an errorCMDwill always be executed by a shell so that config vars are made available to your process; to execute single binaries or use images without a shell please useENTRYPOINT
(意訳)CMD は必ず指定してね。
Azure DevOps Pipelines
上の昨日の記事にも書きましたが DevOps Pipelines ではYAMLファイルで設定できます。
Agent-pool は Hosted Ubuntu 1604 を使います。
azure-pipelines.yml
pool:
vmImage: 'Ubuntu 16.04'
variables:
HEROKU_API_KEY: YOUR_API_KEY
HEROKU_APP: YOUR_APP_NAME
steps:
- script: |
#!/bin/bash
heroku container:login
heroku container:push web --app $HEROKU_APP
heroku container:release web --app $HEROKU_APP
displayName: 'deploy to heroku'
Heroku CLI は Hosted Ubuntu 1604 にインストールされているのでスクリプト一つで済みます。
Heroku CLI の認証は環境変数に HEROKU_API_KEY があればそれで行えるので、 heroku auth:token とかで取得、適宜作成します。
おそらく Secret 用の指定方法はあるのですが、まだ調べてないのでそれはまた今度。
`heroku container:push` は Docker Tag 渡すものだと勘違いした。
— kheiakiyama (@kheiakiyama) September 15, 2018
heroku container:push は docker build && docker push が走るようで、若干気持ち悪さがあります。
タグを意識させないためでしょうか。
docker build を自分で指定できないの自由度下がる
— kheiakiyama (@kheiakiyama) September 15, 2018
感想
ということで無料の範囲で DevOps パイプラインまで作成することができました。
サクッと Docker コンテナの PaaS が使える Heroku はやはりよいですね。
久しぶりに使ったので変なところにハマってしまいましたが無事動きました。
Heroku が動かない動かないと思ってたら dyno はデフォルト0なのか。 https://t.co/b8AqUFlBtq
— kheiakiyama (@kheiakiyama) September 15, 2018
これで Nuxt.js のバックエンドAPIが動かせそうです。

Nuxt.jsビギナーズガイド―Vue.js ベースのフレームワークによるシングルページアプリケーション開発
- 作者: 花谷拓磨
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2018/10/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る