前書き
Lightsailに載せているGithubのプロジェクトをデプロイする際にpushしたタイミングで自動的に展開できるようにGithubActionsを利用しました。
事前準備
SSHで接続できるユーザの作成とプロジェクトをcloneしておきます。
また、鍵関係は以前の記事で取得した内容を利用することを想定して記載していきます。
GithubActions
GithubのリポジトリでActionsから設定していきます。
公開鍵の設定
接続するユーザの公開鍵をリポジトリに設定します。
Github上のリポジトリ画面から「settings」→「deploy keys」から「add new key」と進み、
フォームのkey欄に公開鍵の内容を張り付けて「Add Key」で保存します。
その他設定
その他、デプロイに必要な情報もGithubの管理とすることで秘匿でき入力の手間などが省略できます。
「Secrets」の「Actions」から
こちらも同様に名前と内容を入力して保存していきます。
:::note warn
内容を後から再表示することができないため、誤字などは注意しましょう。
:::
以下のように設定しました。設定した環境変数は後ほど参照します。
名称 | 概要 |
---|---|
SVR_IP | デプロイしたサーバのIPアドレス |
SSH_PORT | SSHに使用するポート番号 |
DEPLOY_USER | SSH接続に使用するユーザ名 |
DEPLOY_PRIVATE_KEY | 暗号鍵の内容 |
SVR_DIR | デプロイしたプロジェクトのサーバ上のパス |
ワークフローの追加
ドキュメントを参考に
Github上から「Actions」の「New Workflow」と進むと実行するワークフローをテンプレートから選択できます。
今回は一から書いていくので最上部に表示されている「set up a workflow yourself」を選択します。
ワークフローを書き込むことができますが、一旦そのまま「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 | 接続するユーザ名 |
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
コメントを残す