📌

GitHub Actionsで沼りました

2024/03/28に公開

内容

GitHubActionを用いた自動デプロイで、かなり沼りました。
まずカリキュラムに記載ある内容だと知らなかったのが致命的でした。

やる事

大きく分けて3つでした。
①GitHub上の設定をする
②ワークフローを作成する
③公開鍵をEC2サーバーに送る

①GitHub上の設定をする

  1. "Settings"をクリックする

  1. "Secrets and variables"をクリックして、出てきた"Actions"をクリックする

  1. "New repository secret"をクリックする

  1. "Name"に"Secret"に情報を入力した後、"Add secret"をクリックして登録する。

記入する内容は下記です。

Name Secret
HOST_NAME EC2のパブリックIPアドレス
PRIVATE_KEY $ cat ~/.ssh/id_rsa で出力された内容
USER_NAME ec2-user

②ワークフローを作成する

カリキュラムのソースコードを直接ダウンロードすればいいのですが...

  1. アプリのディレクトリ直下に、".github"フォルダを作成

  2. ".github"フォルダ直下に"workflows"フォルダを作成

  3. "workflows"フォルダ直下に"rails.yml"ファイルを作成する

  4. "rails.yml"に下記をコピペする。

  5. "cd アプリケーション名"の部分を正しく記入する。

name: Rails CI/CD

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/setup-node@v2
    - name: Deploy 
      env:
        PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
        USER_NAME: ${{ secrets.USER_NAME }}
        HOST_NAME: ${{ secrets.HOST_NAME }}
      run: |
        echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
        ssh -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOST_NAME} 'cd アプリケーション名 &&
        git pull origin main &&
        ~/.rbenv/shims/bundle install &&
        ~/.rbenv/shims/bundle exec rails assets:precompile RAILS_ENV=production &&
        ~/.rbenv/shims/bundle exec rails db:migrate RAILS_ENV=production &&
        if [[ -e tmp/pids/puma.pid ]];then sudo kill $(cat tmp/pids/puma.pid); echo kill puma process;fi &&
        ~/.rbenv/shims/rails s -e production'

③公開鍵をEC2サーバーに送る

  1. Cloud9上公開鍵を転送する
ec2-user:~/environment $ scp -i ~/.ssh/practice-aws.pem ~/.ssh/id_rsa.pub ec2-user@ipアドレス:.ssh/id_rsa.pub
  1. EC2サーバー側で公開鍵を許可するように設定する
[ec2-user@ip-172-**-**-*** ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

後は、下記の登録内容が間違えてなければ、リモートリポジトリのmainブランチへPushするだけで、デプロイ側にPushした内容が反映されるはずです。

Name Secret
HOST_NAME EC2のパブリックIPアドレス
PRIVATE_KEY $ cat ~/.ssh/id_rsa で出力された内容
USER_NAME ec2-user

"Actions"をクリックして、
下記のように緑チェックがついていれば成功です。

まとめ

ほんとにバカみたいに時間を使いました。インフラ関係の知識になるのでしょうか?この手の内容で沼ると情報を探すのが大変でした。
少し知識はついたと思いますが、難しくてほとんど分からなかったです。
本件とは別で、料金発生するそうですが、「EIP」は必ず設定しておいた方がいいです。

Discussion