📖

Github Actions でVPSにデプロイする最小コード

に公開

まず最終的なworkflowがこちら

/.github/workflows/deploy.yaml
name: Deploy
on:
  push:
    branches:
      - main # メインブランチがプッシュされたときに実行
jobs:
  deploy:
    runs-on: ubuntu-24.04
    steps:
      - name: SSH and Pull or Clone
        uses: appleboy/ssh-action@v0.1.10
        with:
          host: "${{ secrets.SSH_HOST }}"
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          port: 22
          script: |
            if [ ! -d "/home/ubuntu/gha-training" ]; then
              git clone https://0fuzimaru0:${{ secrets.GH_TOKEN }}@github.com/0fuzimaru0/gha-training.git /home/ubuntu/gha-training
            else
              cd /home/ubuntu/gha-training
              git pull origin ${{ github.ref_name }}
            fi

以下は各セクションの説明です

name

/.github/workflows/deploy.yaml
name: Deploy

対象のGitHubリポジトリの「Actions」タブに表示される名称を指定します。

on

/.github/workflows/deploy.yaml
on:
  push:
    branches:
      - main

これは下記に記す「job」の発火条件です。今回はmainブランチにpushされた際に発火します。

runs-on

/.github/workflows/deploy.yaml
jobs:
  deploy:
    runs-on: ubuntu-24.04

ジョブを実行するOSとバージョンを指定します。

steps

    steps:
      - name: SSH and Pull or Clone
        uses: appleboy/ssh-action@v0.1.10
        with:
          host: "${{ secrets.SSH_HOST }}"
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          port: 22
          script: |
            if [ ! -d "/home/ubuntu/gha-training" ]; then
              git clone https://0fuzimaru0:${{ secrets.GH_TOKEN }}@github.com/0fuzimaru0/gha-training.git /home/ubuntu/gha-training
            else
              cd /home/ubuntu/gha-training
              git pull origin ${{ github.ref_name }}
            fi

Actionsのログに表示されるステップ名を指定します。

uses: appleboy/ssh-action を使ってリモートサーバーに SSH でアクセスし、指定された script を実行することを宣言します。
with: SSH 接続情報をGithubに保存したシークレットから取得します。
script: 指定したディレクトリ (/home/ubuntu/gha-training) が存在しない場合はリポジトリを git clone、すでに存在する場合は最新の変更を取得するために git pull origin <branch名> を実行します。

onで設定できる条件一覧

GitHub Actionsのonでは、ワークフローを発火させるさまざまな条件を指定できます。以下に主要な条件を列挙します。

push

特定のブランチやタグへのプッシュ時にワークフローを実行します。ブランチやパスのフィルタリングが可能です。

pull_request

プルリクエストが作成・更新された際にワークフローを実行します。レビュー前の自動テストなどに使用されます。

pull_request_target

プルリクエストのベースブランチのコンテキストでワークフローを実行します。外部貢献者からのPRでもシークレットにアクセスできるため、セキュリティに注意が必要です。

workflow_dispatch

GitHub UIやAPIから手動でワークフローを実行できるようにします。任意のタイミングでの実行に便利です。

schedule

cron記法でスケジュール実行を設定します。定期的なバックアップやレポート生成などに使用されます。

release

リリースが作成・公開・編集された際にワークフローを実行します。リリース時の自動デプロイなどに活用できます。

create

ブランチやタグが作成された際にワークフローを実行します。新規ブランチの初期設定などに使用されます。

delete

ブランチやタグが削除された際にワークフローを実行します。削除時のクリーンアップ処理などに使用されます。

issues

イシューが作成・編集・クローズされた際にワークフローを実行します。イシューの自動ラベリングなどに活用できます。

issue_comment

イシューやプルリクエストにコメントが追加された際にワークフローを実行します。特定のコメントをトリガーにした処理に使用されます。

workflow_run

他のワークフローが完了した後に実行されます。複数のワークフローを連鎖させる際に使用されます。

repository_dispatch

外部システムからのWebhookでワークフローを実行します。カスタムイベントによる柔軟なトリガー設定が可能です。

fork

リポジトリがフォークされた際にワークフローを実行します。フォーク時の通知やウェルカムメッセージの送信などに使用されます。

watch

リポジトリがスターされた際にワークフローを実行します。スター数の記録や感謝メッセージの送信などに活用できます。

workflow_call

他のワークフローから再利用可能なワークフローとして呼び出されます。共通処理のモジュール化に便利です。

Discussion