😊

Heroku の自動デプロイを GitHub Action で再現する

2022/05/09に公開

Heroku の自動デプロイを GitHub Action で再現する

Heroku の 2413 の Issue が Still Open で Heroku の自動デプロイが使い物にならないので、GitHub Actionで実現します。

https://status.heroku.com/incidents/2413

ちょうど良さそうな GitHub Action があるので使っていきます。

https://github.com/AkhileshNS/heroku-deploy

使い方

基本的には README のとおりです。

name: Deploy

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: akhileshns/heroku-deploy@v3.12.12 # This is the action
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: "YOUR APP's NAME" #Must be unique in Heroku
          heroku_email: "YOUR EMAIL"

Yaml の中で利用する Heroku の API Key ですが、いろんなサイトで以下のURLページで取得できるとか書かれてるケースが多いです。

https://dashboard.heroku.com/account

が、これはこれはアカウントに一つしか無い、とてもややこしいトークンなので、これを乱用するのはとても気持ちが悪いです。

ここは、authorizations:create でトークンを個別に発行するのが良いでしょう。

$ heroku authorizations:create
# output below
Creating OAuth Authorization... done
Client:      <none>
ID:          XXXXXX
Description: Long-lived user authorization
Scope:       global
Token:       XXXXXX
Updated at:  Mon May 09 2022 21:08:36 GMT+0900 (日本標準時) (less than a minute ago)

ここで作成したトークンは一覧表示できないっぽいので、ID はしっかり覚えておく必要があります。

トークンの詳細は authorizations:info <id> で確認可能です。

セキュリティ的にどうなの?

API キーを利用する以上、セキュリティの心配は重要です。

とりあえず、action を利用する際には、 tag を固定するのは必須です。

実行されるコードが気になる場合は以下のファイル辺りを中心に確認しておくのが良いでしょう。

https://github.com/AkhileshNS/heroku-deploy/blob/v3.12.12/index.js

action を pr ベースで実行するとセキュリティのリスクが跳ね上がります。

あとコードレビューの中で入念に yml ファイルの変更を監視するようなワークフローを取らないと、evil なチームメンバーのアカウントが evil に落ちた場合 、何でもできる感じになるので注意が必要です。

Discussion