♟️

GitHub Actions で XServer に rsync

に公開

Actions のコードはこちら。

name: Deploy Production

on:
  push:
    branches:
      - main

jobs:
  deploy-to-production:
    runs-on: blacksmith-2vcpu-ubuntu-2404
    environment:
      name: production

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
        with:
          version: 10.12.4
      - uses: actions/setup-node@v4
        with:
          node-version: 24.11.0
          cache: "pnpm"

      - name: Prepare .ssh dir
        run: mkdir -p ~/.ssh && chmod 700 ~/.ssh

      - name: Generate ssh key
        run: echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519 && chmod 600 ~/.ssh/id_ed25519
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Register host key
        env:
          SSH_HOST: ${{ secrets.SSH_HOST }}
          SSH_PORT: ${{ secrets.SSH_PORT }}
        run: |
          # サーバーのホストキーを取得して known_hosts に登録
          ssh-keyscan -p "$SSH_PORT" "$SSH_HOST" >> ~/.ssh/known_hosts

      - name: Install rsync
        run: |
          sudo apt-get update -y
          sudo apt-get install -y rsync

      - name: Build
        env:
          GTAG_ID: ${{ vars.GTAG_ID }}
          TYPEKIT_ID: ${{ vars.TYPEKIT_ID }}
          DEPLOY_TO: ${{ vars.DEPLOY_TO }}
        run: |
          git lfs pull
          pnpm install --frozen-lockfile
          pnpm build

      - name: Deploy on XServer
        env:
          SSH_USER: ${{ secrets.SSH_USER }}
          SSH_HOST: ${{ secrets.SSH_HOST }}
          SSH_PORT: ${{ secrets.SSH_PORT }}
          SSH_PATH: ${{ secrets.SSH_PATH }}
        run: |
          rsync -achmuv --progress --delete --exclude-from="EXCLUDE" --dry-run -e "ssh -p $SSH_PORT -o StrictHostKeyChecking=yes" ./dist/ "$SSH_USER@$SSH_HOST:$SSH_PATH"

少しだけ解説

runs-on - ランナーは、Blacksmith を使用しています。

使用するスペックを選ぶことができて、"安く済ませよう"、"パフォーマンスを上げよう"が柔軟に選択できるのがいいですね。
更に、無料枠もあるので、スモールにスタートすることもできます。

使い方は簡単で、事前にアカウントを作成し、GitHub と連携した後、
runs-on: blacksmith-2vcpu-ubuntu-2404 を追加するだけです。
https://www.blacksmith.sh/

ssh

鍵を作って、認証する流れ。

  1. blacksmith-2vcpu-ubuntuPrepare .ssh dir.ssh ディレクトリを作成します
  2. Generate ssh key でリポジトリに設定した秘密鍵を追加します
  3. Register host key で XServer のホストキーを known_hosts 登録し、認証の際の確認をスキップするようにします

rsync

デフォルトで入ってないのでインストールします。

Build

プロジェクトに合わせてビルドコマンドを実行して下さい。
git lfs を使用している場合、ここでコケたので、git lfs pull を追加してます。

Deploy on XServer

secrets を元に rsync します。
--dry-run を入れているので、実際に使う際は外して下さい。

secrets, vars

GitHubで設定します。

NEW FOLK Develop team.

Discussion