GitHub Actionsで自動デプロイする

2022年6月18日

概要

  • GitHubのmainが更新されたら自動デプロイをしてほしい
  • GitHub Actionsで自動デプロイをやりたい
  • 公開鍵を使いまわそうとすると怒られるので、それぞれのレポジトリごとに個別の公開鍵を設定して使いたい

内容

サーバ上で以下のコマンドを打つ。(パスフレーズは入力せずにEnterでOK)

ssh-keygen -t rsa -b 4096 -C [メールアドレス:なんでもOK] -f ~/.ssh/[ファイル名:レポジトリの略称とかだと分かりやすい]

GitHubのレポジトリSettings > Deploy key > Add deploy keyから公開鍵~/.ssh/[ファイル名].pubの中身を登録する。(タイトルは適当でOK)

サーバ上の~/.ssh/configに以下のように追加する。

Host [ホスト名:github-レポジトリの略称など]
    User git
    Port 22
    HostName github.com
    IdentityFile ~/.ssh/[ファイル名]
    TCPKeepAlive yes
    IdentitiesOnly yes

~/.ssh/configファイルが無ければ、

touch ~/.ssh/config
chmod 600 ~/.ssh/config

で作成して、追加する。

サーバ上の公開ディレクトリを作りたい場所で以下のコマンドを実行。

git clone git@[ホスト名:github-レポジトリの略称など]:[ユーザ名]//[リポジトリ名].git [公開用ディレクトリ名]

GitHubのレポジトリSettings > Secrets > Actions > New repository secretから以下を登録する。

名前(適当でOK)書くこと
SERVER_USERNAME接続するサーバのユーザ名:XXXX
SERVER_HOSTサーバーのホスト名:hogehoge.comとか
SSH_PORTsshのポート番号:デフォルトだと22とか
SSH_PRIVATE_KEYサーバ側にssh接続する際の秘密鍵の中身:ローカルマシンの~/.ssh/id_rsaとかの中身を張り付ける
SERVER_DEPLOY_DIRgit pullを実行したいディレクトリ
SSH_PASS公開鍵に設定したパスフレーズ:設定しなかった場合はこの項目は登録しなくて良い

GitHubのレポジトリActions > Set up this workflowから、以下を作成する。

name: CI        #Workflow の名前何でもOK

on:             #実行されるタイミングを設定
  push:         #pushでマージされた時も動く(pull_request:とすればプルリクのマージのみになる)
    branches:   #対象となるブランチを設定
      - main

jobs:           #以下が実行される内容
  build:
    runs-on: ubuntu-latest  #実行環境を指定

    steps:
      - name: Deploy
        uses: appleboy/ssh-action@master    #使用するアクション(sshでサーバに接続)
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USERNAME }}
          port: ${{ secrets.SSH_PORT }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          passphrase: ${{ secrets.SSH_PASS }}
          script: |     #サーバで実行されるコマンド(サーバ内で動かせるコマンドなら大体できるはず…なので色々やってみると吉?)
            cd ${{ secrets.SERVER_DEPLOY_DIR }} 
            git pull origin main

ActionsでエラーがなればOK!

要するにsshでサーバに繋いで、ディレクトリに移動して、pullを走らせているだけ