Elixir版HerokuのGigalixir、使ってますか?環境構築も非常に簡単で、Elixir製のアプリを速攻でデプロイするのに非常に便利です。

まだ使ったことのない方は@piacereさんの【本番構築Gigalixir編①】Elixir/Phoenixの初期PJリリースまでの手順などを見て、触ってみると良いと思います。

この記事ではそんな便利なGigalixirを使い倒すために、GitHubActionを利用して特定のブランチにpushされたタイミングでGigalixirへデプロイする手順を解説します。

GitHubActionとは

GitHubActionとはGitHubが提供するCIサービスです。

  • Pull Requestが出されたらテストを実行
  • 特定のブランチにmergeされたらデプロイを実行

など、TravisCIややCircleCIといった他のCIツールと同じような使い心地でCIを組み込むことができます。

ただし、2019/10/17時点でファイルのキャッシュに対応していないため、規模の大きなプロジェクトだと厳しい模様。こちらの投稿 を見る限り、11月中旬を目処に組み込むとのことなので、期待大ですね。

まだ利用したことがない方は、以下のページよりパブリックベータ版を利用できます。

https://github.com/features/actions

1. workflowのymlを作成する

gitのプロジェクトのルートに、.github/workflows/deploy.ymlを新規作成します。

ローカルでymlを新規に作るか、GitHubのActionsタブから適当に言語を指定すると、GitHubのファイル編集画面に遷移します。この画面から作ってもOKです。

new_workflow_1 new_workflow_2

ファイルを作成したら、次のように記述します。

name: gigalixir deploy

on:
  push:
    branches:
      - production              ・・・(1)
jobs:
  setup:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: Set up Python 3.x
      uses: actions/setup-python@v1         ・・・(2)
      with:
        python-version: '3.x'
    - name: Install dependencies            ・・・(3)
      run: |
        python -m pip install --upgrade pip
        pip install gigalixir
    - name: login gigalixir
      run: |
        gigalixir login -y -e ${{ secrets.GIGALIXIR_EMAIL }} -p ${{ secrets.GIGALIXIR_PASSWD }}     ・・・(4)
    - name: add remote
      run: |
        gigalixir git:remote ${{ secrets.APP_NAME }}                ・・・(5)
    - name: deploy                                                                         ・・・(6)
      run: |
        git checkout -b production                              
        git push -f gigalixir production:master
  • (1) productionブランチにmergeされたらgigalixirでデプロイするようにしています。ここは各自のブランチ戦略に合わせて変えてOKです。
  • (2) gigalixirへログインするにはgigalixir CLIをpipでインストールする必要があるため、python環境を用意します。人様が作った環境をusesに指定してサクッと環境を用意できるのは大変ありがたいですね!
  • (3) gigalixirのcliをpipでinstallします。
  • (4) installしたCLIを利用してgigalixirにログインします。CLIでは-e <EMAIL> -p <PASSWORD>のようにアカウント情報を渡せばログインできるようになっています。メールアドレスとパスワード、後述のAPP_NAMEはGitHubのSecretsから設定した環境変数を読み込んでいます。パスワードのベタ書きはやめておきましょう。
  • (5) リモートリポジトリを作成します。APP_NAMEはgigalixirで作成したアプリ名を指定します。(参考: How to Set the Gigalixir Git Remote
  • (6)GitHubアクションではデフォルトのcurrent branch名がHEAD detached at (XXXXX)のようになっているようです。なので、適当な名前のブランチをローカルに作成&移動後、ローカルブランチをリモートリポジトリにpushしてデプロイします。ここではCIが回るブランチ名と合わせてproductionブランチとしています。

これでymlの設定は完了です。シンプルですね!

環境変数を設定する

続いて、リポジトリのSettings>Secretsから環境変数の設定をします。yml内で参照している

  • APP_NAME

    • gigalixirでのアプリ名
  • GIGALIXIR_EMAIL

    • アカウントのメールアドレス
  • GIGALIXIR_PASSWD

    • アカウントのパスワード

の値をそれぞれ設定してください。

secret

これで準備は環境です!ymlファイルの追加をcommitし、productionブランチをpushしてGitHub Actionのworkflowが開始されればOKです。

workflows

Actionの詳細から、ログが確認できます。

workflow_log

まとめ

これでgigalixirへの継続的なデプロイが可能です!個人開発にはもってこいのツールですね。ぜひお試しください。