Chapter 04

GitHub Actions で自動デプロイ

まちゅけん
まちゅけん
2023.12.16に更新

この章では GitHub Actions で bot を自動デプロイする方法を学んでいきます。

GitHub Actions とは

GitHub Actions とは、GitHub リポジトリにコードをプッシュするなどのイベントに応じて任意のコードを実行するサービスです。 この章ではこちらを利用してコードのプッシュ時に自動で bot をクラウド環境にデプロイする構成を試してみます。

準備作業

  • GitHub アカウントが必要です。 ない場合は作成しましょう。
  • 前の章で利用したクラウド環境を使用します。 作成してなかったり削除した場合は作成しておいてください。

次に Git 操作に慣れている方は以下の準備作業を行ってください。

  1. GitHub リポジトリ (例: bot-deploy-demo) を作成する。
  2. GitHub リポジトリに前の章から利用している main.py, requirements.txt, Dockerfile, compose.yaml のサンプルコードをプッシュする。

以降は Git に慣れていない方向けの操作を説明します。

リポジトリ作成

  • 右上の + アイコンから New repository をクリックします。

  • Repository name に適当な名前を付けます (例: bot-deploy-demo)。
  • Add a README file のチェックを入れます。
  • Create repository をクリックしてリポジトリを作成します。

次のようなリポジトリ画面が開きます。 そこでキーボードの . (ドット) を入力してください。 リポジトリを Web 版 VS Code で開くことができます。



前の章から利用している main.py, requirements.txt, Dockerfile, compose.yaml のサンプルコードをコピーします。 新しいファイルを作成して内容を張り付けてください。

ファイルを作成したら、それらをリポジトリにコミット&プッシュをします。 まずはソース管理タブを開いて 変更 の + ボタンを押します。

メッセージ 欄に適当なコミットメッセージ (例: Add source files)を入力して コミットとプッシュ を押します。

これでリポジトリにファイルが追加されます。 GitHub のリポジトリページに戻るとファイルが追加されているのが確認できます。

シークレットの設定

GitHub から SSH 接続でクラウド環境にデプロイするために SSH 鍵や IP アドレスをシークレットに保存します。 値を直接ワークフローファイル (後述) に記載してはいけません。 次の画像の手順でシークレットを追加します。

シークレットは次の名前のものを設定します。

  • SSH_HOST: クラウド環境の IP アドレス (xx.x.x.xx)
  • SSH_USER: クラウド環境のログインユーザー名 (ec2-user など)
  • SSH_PRIVATE_KEY: クラウド環境に SSH でログインするための秘密鍵
    • AWS EC2 インスタンスを作成した時に指定したキーペアの名前の鍵ファイルの内容です。 ローカル環境の ${HOME}/.ssh ディレクトリに id_rsaid_ed25519 などのファイル名で保存されていると思われます (.pub付いていない方です)。 ファイルの内容をコピーペースしてください。

自動デプロイ 🤖🚀

ここまでの設定により自動デプロイの準備が整いました!

準備でファイルを作成した時と同じ要領で以下のワークフローファイル (.github/workflows/deploy.yml) を作成してコミット&プッシュしてください。 そうすると GitHub Actions によって自動デプロイが始まります!🚀🚀

.github/workflows/deploy.yml
name: Docker Compose Up

on:
  push:
    branches: [ "main" ]
  workflow_dispatch:

jobs:
  up:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - uses: MrSquaare/ssh-setup-action@84ff9deaad2dbb1be99efe9080a849fe66139149 # v2.0.1
        with:
          host: ${{ secrets.SSH_HOST }}
          private-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - run: docker compose up --build -d
        env:
          DOCKER_HOST: 'ssh://${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}'

自動デプロイの進捗はリポジトリの Actions タブから確認できます。

では本当にデプロイできているのか確認してみましょう。 前の章でインストールした Portainer のコンテナ一覧を表示してください。 前の章で試していたコンテナとは別に、今回の例では bot-deploy-demo-bot-demo-1 という名前で起動しているはずです 🎉