この章では GitHub Actions で bot を自動デプロイする方法を学んでいきます。
GitHub Actions とは
GitHub Actions とは、GitHub リポジトリにコードをプッシュするなどのイベントに応じて任意のコードを実行するサービスです。 この章ではこちらを利用してコードのプッシュ時に自動で bot をクラウド環境にデプロイする構成を試してみます。
準備作業
- GitHub アカウントが必要です。 ない場合は作成しましょう。
- 前の章で利用したクラウド環境を使用します。 作成してなかったり削除した場合は作成しておいてください。
次に Git 操作に慣れている方は以下の準備作業を行ってください。
- GitHub リポジトリ (例:
bot-deploy-demo
) を作成する。 - 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_rsa
やid_ed25519
などのファイル名で保存されていると思われます (.pub
が付いていない方です)。 ファイルの内容をコピーペースしてください。
- AWS EC2 インスタンスを作成した時に指定したキーペアの名前の鍵ファイルの内容です。 ローカル環境の
自動デプロイ 🤖🚀
ここまでの設定により自動デプロイの準備が整いました!
準備でファイルを作成した時と同じ要領で以下のワークフローファイル (.github/workflows/deploy.yml
) を作成してコミット&プッシュしてください。 そうすると GitHub Actions によって自動デプロイが始まります!🚀🚀
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
という名前で起動しているはずです 🎉