セーフィー株式会社 プラットフォーム開発部のソフトウェアエンジニア 斎藤です。 Safie サービスの安定運用に寄与するべく、インフラ周りの構築・運用を主に担当しています。
今回は複数人で開発していると起こりがちの不便さを GitHub Actions を活用し解消したお話です。
例えばこんな不便なことありませんか?
ブランチを固定しておきたいとき
動作確認のために、とあるブランチをしばらく取り込んでおきたいとき
テスト環境へブランチを適用したいが、ブランチ適用待ち渋滞の発生 (複数人で一つの環境を共有している場合に発生しがち)
不便をどのように解消したか
複数人で一つの環境を共有しているのが問題になっています。
ブランチ毎に確認環境があれば良さそうということで、事前確認出来る環境を自動構築 && 不要になったら自動破棄する仕組みを作りました。
概要図
今回作った仕組みの概要図になります。 GitHub Actions AWS SDK for Python (Boto3)を利用しています。
処理フロー
- ユーザーが git push します
- Pull Request 作成 && ラベル (deploy) 付与します ※ラベル名は何でも良いです
ラベル付与方式にした理由は、事前確認するまでもない場合に発火させない為
※ 例えば typo / ドキュメント修正など明らかに動作に影響しない修正とか - ラベル付与イベントを検知して GitHub Actions が発火し、環境自動構築します
- docker build && ECR に push
- Python (boto3) kick
- タスク定義の登録
- target group と forward rule 新規追加
- タスク定義と target group を紐付けた service を新規追加
- 最後に CNAME のレコード登録をして完了
https://prXXX.example.com
XXX はプルリク番号が入りますhttps://pr82.example.com
みたいにプルリク毎に環境が出来ます
処理の詳細
GitHub Actions と Python (boto3) の処理をそれぞれコードベースでかいつまんで説明します。
GitHub Actions
Python (boto3)
作った環境の自動廃棄
作った環境の自動廃棄については、以下の条件で行っています。
- プルリクエストがマージされた時
- destroy する GitHub Actions 発火
↓ python kick python destroy_dev.py ${{ github.event.pull_request.number }}
- route 53) DELETE resource_record_sets
- ECS) タスク停止 && deregister_task_definition
- ECS) delete_service
- ALB) delete_rule && delete_target_group
残課題
一度確認した後、再修正が必要で再 push したときの待ち時間(約1分)をもう少し短く出来れば良いなと思っています。
おわりに
以上、複数人で開発していると起こりがちの不便さを GitHub Actions を活用し解消したというお話でした。
日々の開発業務を進めていく上で、小さな不便を自ら拾いに行き、自分ごととして改善するチャンスが沢山あります。
改善を繰り返すことで自分自身の成長、やがてはチーム、組織へも貢献出来るかと思います。
セーフィーでは、迷った時はやってみて成長機会を求める意識の高い方を歓迎します。 ご興味のある方のご連絡をお待ちしています。