こなさんち

しがないフリーランスエンジニアの備忘録。

自動デプロイしてみた。(CI/CDの第一歩 / Github Action)

背景

毎回webサーバで git pull すんのめんどくさい

やること

Github Action使って、pushされたらサーバで自動デプロイ

やったこと

鍵の作成

これは今までやっていたが今回 パスフレーズなし にすることがポイントだった。デプロイ先でパスワードの入力待ちになってしまうから。 ※ ただ、力技な気がするので詳しい人には聞きたい。

環境変数の設定

リポジトリの [Settings] -> [Secrets] でAction secrets を設定する。これを「環境変数」って言い方したけどgithub actionでの設定ファイルに使うよ。

New Secret とすると Name と Value を入力できる。

Name 記述内容
SERVER_USERNAME デプロイサーバへssh接続する際のユーザ名
SERVER_HOST サーバのホスト
SSH_PORT 接続サーバのポート。sshなのでデフォは22だけど、変えてる可能性は十分ある。
SSH_PRIVATE_KEY 秘密鍵Github秘密鍵じゃないよ。サーバに対しての秘密鍵だよ。
SSH_PASS 秘密鍵のパスワード
SERVER_DEPLOY_DIR デプロイするパス

私の設定の最終形態

Action secrets
Action secrets

設定ファイル

Github上でも作れますが、なんとなく私は自分のローカルで作ってpushしたかったのでおとなしく /.github/workflows/deploy.yml を作成。ファイル名は何でも良いらしい。ディレクトリで自動識別してくれる模様。

name: CI

on:
  push:
    branches:
      - develop

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Deploy
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USERNAME }}
          port: ${{ secrets.SSH_PORT }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          passphrase: ${{ secrets.SSH_PASS }}
          script: |
            cd ${{ secrets.SERVER_DEPLOY_DIR }}
            git pull origin develop

引っかかりポイント

ssh-add で毎回鍵を登録しないといけなかったが、鍵を作るときのパスフレーズを空にすればsshへの再登録は不要だった。

ただ、念の為

# ~/.bashrc

eval "$(ssh-agent -s)"
ssh-add

としておいた。ymlにも書いたから多分要らない。

参考

hsmtweb.com