2
1

More than 1 year has passed since last update.

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

Posted at

前書き

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」から
こちらも同様に名前と内容を入力して保存していきます。

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

new_secrets.png

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

名称 概要
SVR_IP デプロイしたサーバのIPアドレス
SSH_PORT SSHに使用するポート番号
DEPLOY_USER SSH接続に使用するユーザ名
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

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

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接続を行うものを指定しています。

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

名称 概要
host 接続先
username 接続するユーザ名
port SSH接続に使用するポート
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
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1