GithubActionsでpushごとにデプロイする

by

in

前書き

Lightsailに載せているGithubのプロジェクトをデプロイする際にpushしたタイミングで自動的に展開できるようにGithubActionsを利用しました。

事前準備

SSHで接続できるユーザの作成とプロジェクトをcloneしておきます。

また、鍵関係は以前の記事で取得した内容を利用することを想定して記載していきます。

GithubActions

GithubのリポジトリでActionsから設定していきます。

公開鍵の設定

接続するユーザの公開鍵をリポジトリに設定します。

Github上のリポジトリ画面から「settings」→「deploy keys」から「add new key」と進み、
フォームのkey欄に公開鍵の内容を張り付けて「Add Key」で保存します。

new_key.png

その他設定

その他、デプロイに必要な情報もGithubの管理とすることで秘匿でき入力の手間などが省略できます。

「Secrets」の「Actions」から

こちらも同様に名前と内容を入力して保存していきます。

:::note warn
内容を後から再表示することができないため、誤字などは注意しましょう。
:::

new_secrets.png

以下のように設定しました。設定した環境変数は後ほど参照します。

名称概要
SVR_IPデプロイしたサーバのIPアドレス
SSH_PORTSSHに使用するポート番号
DEPLOY_USERSSH接続に使用するユーザ名
DEPLOY_PRIVATE_KEY暗号鍵の内容
SVR_DIRデプロイしたプロジェクトのサーバ上のパス

ワークフローの追加

ドキュメントを参考に
Github上から「Actions」の「New Workflow」と進むと実行するワークフローをテンプレートから選択できます。

今回は一から書いていくので最上部に表示されている「set up a workflow yourself」を選択します。

workflow.png

ワークフローを書き込むことができますが、一旦そのまま「start commit」で空のファイルだけ作成します。この時にファイル名も入力できます。

コミットすると以下の場所のディレクトリにymlファイルが作成されます。

リポジトリ
├──.git
├──.github
│   └──workflows
│      └──xxx.yml
└──...

ワークフロー

今回は以下のようにしました。

name: CI

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SVR_IP }}
          username: ${{ secrets.DEPLOY_USER }}
          port: ${{ secrets.SSH_PORT }}
          key: ${{ secrets.DEPLOY_PRIVATE_KEY }}
          script: |
            cd ${{ secrets.SVR_DIR }}
            git pull

各部分でそれぞれの挙動を設定できます。

https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions

on:
  push:
    branches:
      - main

ここでmainのブランチにpushされた際にワークフローが動きます。branchesで監視する対象を指定できます。
jobs以下に実際の内容を設定していきます。今回の例では buildという名前のジョブを作成しています。 各ジョブはjobs-onで実行環境を指定できます。
具体的な内容は以下の部分になります。

steps:
  - name: Deploy
    uses: appleboy/ssh-action@master
    with:
      host: ${{ secrets.SVR_IP }}
      username: ${{ secrets.DEPLOY_USER }}
      port: ${{ secrets.SSH_PORT }}
      key: ${{ secrets.DEPLOY_PRIVATE_KEY }}
      script: |
        cd ${{ secrets.SVR_DIR }}
        git pull

usesで別のワークフローを再利用することができます。今回はSSH接続を行うものを指定しています。

https://github.com/appleboy/ssh-action

また、それ以降で実際に使用するパラメータを設定しています。先述の環境変数を読み込むことで内容を秘匿しながら利用できます。

名称概要
host接続先
username接続するユーザ名
portSSH接続に使用するポート
key暗号鍵の内容

最後のscriptが実際に接続した後のコマンドです。今回は移動してpullするだけですが、コンパイルなどをさせるのもありかもしれません。

コミットする

ワークフローを保存してコミットするとGithub上のActionsの画面でワークフローの結果を確認できます。

まとめ

前回の記事と合わせてLightsail上の環境でGithubActionsを利用してデプロイする方法をまとめました。

Lightsailで鍵関係を作成してSSHさせるだけなので非常に手軽に試すことができます。

他にもGithubActionsで自動化できるフローは多いので、積極的にワークフローを作成していきたいですね。

参考文献

https://docs.github.com/ja/actions/quickstart

https://github.com/appleboy/ssh-action

https://qiita.com/azusanakano/items/8dc1d7e384b00239d4d9

https://zenn.dev/hashito/articles/7c292f966c0b59

https://hsmtweb.com/tool-service/github-actions.html

https://qiita.com/HeRo/items/935d5e268208d411ab5a


コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です