12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitHub Actions で Heroku の CI 環境を構築する

Posted at

はじめに

本記事では、GitHub Actions 経由で、Heroku にアプリケーションをデプロイする CI 環境の構築方法を紹介します。

GitHub Actions で CI 環境を構築する記事は既にたくさんあるのですが、

  • 「Heroku + GitHub Actions」の記事が少ない
    • 日本語記事はほとんど無かった
    • 英語記事はあるが内容が古いものが多かった

ことから、備忘録がてら、記事に残そうと思いました。

本記事のスコープ

本記事のスコープは以下を満たす人です。

  • Heroku 上で、アプリケーションを既に稼働させている
  • GitHub Actions で、アプリケーション の CI 環境を構築したい

GitHub Actions で CI 環境を構築する

実現したいワークフロー

  1. アプリケーションのリポジトリの master ブランチのコミットが進んだときにワークフローが起動する
  2. GitHub Actions 実行環境で、アプリケーションのリポジトリにチェックアウトする
  3. (テストを実行する。本記事では割愛)
  4. Heroku に アプリケーションをデプロイする

Heroku の API TOKEN をGitHub Actions に登録する

  1. アプリケーションの GitHub リポジトリを開く
  2. Settings > Secrets > New secret をクリック
  3. 以下の情報を入力して保存する
Name: HEROKU_API_TOKEN
Value: [Heroku-CLI で heroku auth:token と入力して得られる API TOKEN の値]

ワークフローを作成する

リポジトリ直下に/.github/workflows/deploy.ymlを作成して、push すれば CI 構築完了。

/.github/workflows/deploy.yml
name: deploy

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
          fetch-depth: 0
    - name: Deploy to Heroku
      env:
        HEROKU_API_TOKEN: ${{ secrets.HEROKU_API_TOKEN }}
        HEROKU_APP_NAME: [Heroku上で登録しているアプリ名]
      if: github.ref == 'refs/heads/master' && job.status == 'success'
      run: |
        git push https://heroku:$HEROKU_API_TOKEN@git.heroku.com/$HEROKU_APP_NAME.git origin/master:master

fetch-depth: 0 が重要で、これが無いと actions/checkout@v2 プラグインのチェックアウトが shallow clone となってしまいます。Heroku 上で独自管理している Git リポジトリに push することでデプロイを行う関係上、最新コミットしか取得しない shallow clone をして push すると、コミットログの対応が取れずエラーとなってしまします

元々、actions/checkout プラグインにこの仕様が無かったからなのか、「Heroku + GitHub Actions」の記事を探すと、fetch-depth: 0 が無い記事ばかり見つかるので、気をつけてください。自分はこの部分で若干ハマってしまいました。

おわりに

AkhileshNS/heroku-deploy というプラグインもあるので、より複雑な処理を簡潔に記述したいと思う人は試してみると良いと思います。自分は、不要なemailアドレス情報を登録したくなかったので、採用しませんでした。

以上で、GitHub Actions で Heroku の CI 環境を構築する方法の解説はおしまいです。
何か突っ込みポイントなどあれば、ご指摘いただければ幸いです。

参考

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?