23
5

More than 1 year has passed since last update.

GitHub Actionsを使ってGigalixirにデプロイする(Elixir/Phoenix)

Last updated at Posted at 2022-07-02

はじめに

この記事は、「GitHub Actionsの自分流の使い方をシェアしよう」テーマへの応募記事です。

私は、Gigalixirへのデプロイに利用します。

What is Gigalixir?

The only platform that fully supports Elixir and Phoenix. Unlock the full power of Elixir/Phoenix. No infrastructure, maintenance, or operations.

What is Elixir?

プログラミング言語です。

Elixir is a dynamic, functional language for building scalable and maintainable applications.

世界中のIT技術者から愛されているプログラミング言語はなにか。プログラミング関連のQ&Aサイト「Stack Overflow」を運営する米Stack Exchangeがそのような調査結果を発表した。各言語の「Loved」(愛している)と「Dreaded」(恐れている)

で第2位のプログラミング言語です。

mainブランチにPushしたらGigalixirへデプロイ :rocket:

@mokichi さんの記事を参考にしました。

参考というか、もうほとんどそのままんまです。
@mokichi さん、ありがとうございます!

.github/workflows/deploy_to_gigalixir.yml
name: Deploy to Gigalixir
on:
  workflow_dispatch:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: git push gigalixir
        run: |
          git remote add gigalixir https://${{ secrets.GIGALIXIR_EMAIL }}:${{ secrets.GIGALIXIR_API_KEY }}@git.gigalixir.com/${{ secrets.GIGALIXIR_APP_NAME }}.git
          git push -f gigalixir HEAD:refs/heads/main

変更したところは以下の3点です。

本題とは異なるところでハマってしまうのが世の常でありまして、GIGALIXIR_EMAILの設定に苦戦しました。
誰かの助けになるかもしれないので後述しておきます。

空のコミットを定期的にPushする

なぜそんなことしたいの? は、Gigalixirを使ってみればわかります、きっと。

このへんの事情です。
これ以上は言いますまい。

.github/workflows/empty_commit-deploy.yml
name: empty commit and deploy
on:
  workflow_dispatch:
  schedule:
    - cron: '0 0 1,20 * *'

jobs:
  commit-push:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: empty commit
        run: |
          git config user.name "TORIFUKUKaiou"
          git config user.email "torifuku.kaiou@gmail.com"
          git commit --allow-empty -m "empty commit"
          git push origin main
      - name: deploy
        run: |
          git remote add gigalixir https://${{ secrets.GIGALIXIR_EMAIL }}:${{ secrets.GIGALIXIR_API_KEY }}@git.gigalixir.com/${{ secrets.GIGALIXIR_APP_NAME }}.git
          git push -f gigalixir HEAD:refs/heads/main

トリガのスケジュールでcron式が使えます。
上記は、毎月1日と20日の00:00(UTC)にActionが実行されます。

上記は、mainブランチにPushして、Gigalixirにデプロイすることまで一気に行っています。

mainブランチにPushするだけのActionにして、前述のActionでデプロイがキレイだとおもいます。
そのようにすることもできるようですがちょっと一工夫が必要なようです。
どうも、GitHub Actionsが無限ループのような状態にハマってしまうことを防ぐ対策のようです。
Actionの結果をトリガとして別のActionが実行され、また別のActionが実行されということが止めどもなく繰り返され続けることを避けているようです。

方法はあるようです。
Actionを伝搬させたい方は、以下を参考にしてください。

fatal: unable to access 'git.gigalixir.com/.git/': URL using bad/illegal format or missing URL

今回私が一番ハマったところです。
ここがこの記事のレゾンデートルです。
引き出しが一つ増えたなあという感覚を得られたところです。
記事を書くモチベーションになったところです。

そもそも私はシークレットを登録する場所を迷いました。
プロジェクトのSettings > Secrets > Actions > New repository secret です。
ドキュメントはココです。

fatal: unable to access '***git.gigalixir.com/***.git/': URL using bad/illegal format or missing URL

こんなエラーがでましたら、メールアドレスの@%40に変えて登録してみてください。
きっと解決できるとおもいます。

スクリーンショット 2022-07-02 16.52.25.png

ローカルでも再現しました。

上記を読んで、解決策がおもいうかびました。
みなさん、ここははまらないのですかね。
私のメールアドレスの@より前に.があるからですかね。
%40は常識なのですかね。

ローカルで試してみるとエラーの内容がよくわかります。

git remote add gigalixir-test https://torifuku.kaiou@gmail.com:11111-1111-4444-2222-1234567890@git.gigalixir.com/awesome-app.git

git fetch gigalixir-test 
fatal: unable to access 'https://gmail.com:11111-1111-4444-2222-1234567890@git.gigalixir.com/awesome-app.git/': URL using bad/illegal format or missing URL

https://gmail.com:ってなんだ!

git remote remove gigalixir-test

一旦削除して、メールアドレスの@%40に変えてもう一回登録してみます。

git remote add gigalixir-test https://torifuku.kaiou%40gmail.com:11111-1111-4444-2222-1234567890@git.gigalixir.com/awesome-app.git

git fetch gigalixir-test

今度は正しくgit fetchできました:tada::tada::tada::tada::tada:

参考

@nako_kd さんの記事です。
こちらは、Gigalixirの公式の記述に忠実に実施されているそうです。

Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

私のGitHub Actionsの使い方をシェアしました。

  • mainブランチにPushしたらGigalixirへデプロイ :rocket:
  • 空のコミットを定期的にPushする

GitHub Actionsの自分流の使い方をシェアしよう」テーマに投稿された記事からいろいろ知見を得たいとおもっています。

以上です。

23
5
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
23
5