今までcircleCIでEC2に自動デプロイしていたのですが、GitHub Actionsでもやってみたのでその時の方法をご紹介します。
※あくまで今回私が試した方法です。

💁‍♀️

Git ActionsでEC2にSSH接続してファイルをデプロイするまでの方法をお話しするよ





    Strory
  1. 前提条件
  2. SSH Keyの作成と登録
  3. yamlファイルの作成
  4. push!
  5. 参考サイト
  6. まとめ

前提条件

gitレポジトリとEC2内にpushできるディレクトリーが既に作成されていること

SSH Keyの作成と登録

まずはGitHubからEC2にSSH接続できるようにEC2内でSSH Keyを作成します。

今回は~/.sshのディレクトリーにid_rsa_git.pub(公開鍵)とid_rsa_git(秘密鍵)を作成します。

EC2内
$ ssh-keygen -t rsa -b 4096 -m pem -C "CircleCI" -f ~/.ssh/id_rsa_git -N ""

作成した公開鍵を ~/.ssh/authorized_keysに統合し、ファイルのパーミッションを変更します。

EC2内
$ cat ~/.ssh/id_rsa_git.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

~/.ssh/configに以下のように記載します。

EC2内
Host github.com
HostName Github.com
IdentityFile ~/.ssh/id_rsa_git
User git

GitHubに登録するために秘密鍵をメモします。
-----BEGIN RSA 〜PRIVATE KEY-----までをメモしてください。

EC2内
$ openssl rsa -outform pem < ~/.ssh/id_rsa_git
-----BEGIN RSA PRIVATE KEY-----
\•\•\•
-----END RSA PRIVATE KEY-----

EC2内での作業が終わったらGitHubのデプロイしたいレポジトリに行き、
settings > secrets > add a new secretで、秘密鍵を登録します。
ymlファイルで使用するのでEC2のユーザー名とホスト名も登録しておきます。

秘密鍵
- Name:「SECRET_KEY」
- Valueは先ほどコピーした秘密鍵

ユーザー名
- Name:「EC2_USER」
- Value: 「ec2-user」

ホスト名
- Name: 「EC2_HOST」
- Value: EC2のIPアドレス(○○.○○.○○.○○)

yamlファイルの作成

次にymlファイルを作成していきます。

ワークツリーで、.github/workflowsの配下に以下のようなymlファイルを作成します。
ymlファイルの名前はお好きなもので構いません。 今回はdeploy.ymlで作成します。

.github/workflows/deploy.yml
name: Deploy to EC2  
# masterにpushされた時にjobを実行する
on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: test
    # 保存したシークレットたちを環境変数に設定
    env:
      SECRET_KEY: ${{ secrets.SECRET_KEY }}
      EC2_USER: ${{ secrets.EC2_USER }}
      EC2_HOST: ${{ secrets.EC2_HOST }}
      run: 
        # 秘密鍵にファイル名secret_keyをつける
        echo "$SECRET_KEY" > secret_key
        # パーミッションの変更    
        chmod 600 secret_key
        # ssh接続 > デプロイするディレクトリに行く > デプロイ
        ssh -oStrictHostKeyChecking=no ${EC2_USER}@${EC2_HOST} -i secret_key "cd ~/test && git pull origin master"

※~/testを変更してください。

push!

最後に追加したymlファイルをmasterにpushします。

ワークツリー内
$ git add .github/workflows/deploy.yml
$ git commit -m "deploy"
$ git push origin master

githubの対象のレポジトリに行き、Actionsを選択。
緑色のチェックマークがついていたらデプロイ成功です。

github actionsの確認画面

参考サイト

GitHub Actions + SSH で自動デプロイ

まとめ

お疲れ様でした。

GitHub ActionsでSSH接続をする方法についてあまり参考資料がなかったので、出来ないものだと思っていましたが、GitHub Actions + SSH で自動デプロイ のサイトのお陰でなんとか実装出来ました。
SSH接続して自動デプロイする分にはGitHub ActionsもcircleCIもあまり変わらないかな?といった感想です。
(GitHub Actionsの方が微妙にデプロイ時間が短かったかも?)
GitHub Actionsに興味のある方はぜひ試してみてください😃

ほいでは😃