Github ActionsでLaravel(EC2)のデプロイ(deploy)自動化

2020年5月8日

AWSのEC2に構築したLaravelプロジェクトに対して、Github Actionsを利用して自動テスト・デプロイをしてみます。

 

デプロイまでの手順・自動化の大まかな流れは下記のようになります。

 

1. ローカル環境からGitHubへpush。

2. GitHubのmusterブランチに問題なくマージされると、

3. Github Actions上の仮想環境から、SSHによってEC2のサーバーに接続。

4. 接続されたらLaravelプロジェクト内に移動し、GitHubからpullしてデプロイ完了。

 

上記自動化のためには、Github Actions上の仮想環境からSSHによってEC2のインスタンスサーバーと接続する必要があります。そのためにEC2上でSSH鍵の作成し、秘密鍵等をGitHubに登録する必要があります。

 

 

EC2


 

まずEC2上のサーバーに接続したら、SSH鍵の有無(id_rsaやid_rsa.pubといった名前のキーペアとしてのファイル)を調べます。

 

存在しない場合(もしくは既存の鍵と分けて利用したい場合)は、SSH鍵を新規作成します。今回途中の質問は、何も入力せずに進みます。

上記コマンドによって、デフォルトでは id_rsa (秘密鍵)とid_rsa.pub (公開鍵)ファイルが生成されます。

 

生成されたid_rsa.pubの内容を、リダイレクトによってauthorized_keysに追記しておきます。

 

 

GitHub


 

構築したLaravelプロジェクトであるリポジトリの「Actions」画面を開くと、すでに雛形のWorkflowとしてLaravelが用意されているので、今回はまずそれを利用します。

 

 

 

プロジェクトのルートディレクトリに.github/workflows/ディレクトリ、そして設定ファイルであるlaravel.ymlが生成されます。今回はそのまま「Start commit」>「Commit new file」をクリックします。もちろんはじめにGitHub上で生成しなくても、ローカルで作成し後でpushすることが可能です。

 

 

 
デフォルトのlaravel.ymlにはすでにPHPUnit等の実行が記述されています。うまくいけば、下記のように表示されます(緑のチェック)。
 
 
 
 
 

次にGitHub Actionsの仮想環境からSSHによってEC2のインスタンスサーバーと接続するための準備をします(正確に言うならば環境変数の準備:後述)。

 

構築したLaravelプロジェクトであるリポジトリの「Settings」>「Secrets」画面を開きます。「Add a new secret key」ボタンをクリックして、NameとValueのフォームにそれぞれ以下の説明のように値を設定します。

 

HOST_NAME:EC2で立ち上げたインスタンスのIPアドレス
USER_NAME:ユーザー名(今回はec2-user)
PRIVATE_KEY:秘密鍵の内容をコピーして貼り付ける。

 

 

 

デプロイの自動化


 

最後にテストに通った場合のデプロイ自動化のために、デフォルトで生成されたlaravel.ymlを編集します。※本記事ではあらかじめlaravel.ymlをローカルにpullしてから、ローカル上で編集、再度GitHubにpushしています。

 

下記ハイライト部分が追記・編集した部分です。

 

Laravelのプロジェクト/.github/workflows/laravel.yml

7行目

devを追記し、devブランチにプルリクエストをした場合にもテストが実行されるようにしています。

 

33〜35行目

デプロイを実行するためのdeployという名前のジョブを定義しています。このdeployジョブはmaster限定(34行目のif)、かつlaravel-testsジョブのテストに成功した場合(35行目のneeds)にのみ実行されます。

 

40〜43行目

GitHubの「Secrets」画面で入力した値を環境変数として設定し、SSH接続時に利用しています。

 

 

以上で準備は終了です。テストにパスし最終的にGitHub上のmasterにマージされると、下記のような表示が確認できます。

 

 

deployジョブにも緑のチェックがあることが確認できます。

 

 

 

参照ページ


 

GitHub Actionsのワークフロー構文

 

 

 

LINEで送る
Pocket

おすすめ本
定期本
 
Copyright © 2020 思考の葉 All Rights Reserved.  プライバシーポリシー