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.EXPOSE
inDockerfile
is not respected, but can be used for local testing. Only HTTP requests are supported.
(意訳)EXPOSE
は無視します。$PORT
にトラフィックを流すのでよろしくね。
CMD
is required. IfCMD
is missing, the registry will return an errorCMD
will 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
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る