GitHub Actions 详解 – FutureAI-Zeng

GitHub Actions 详解 – FutureAI-Zeng


1. GitHub アクションとは何ですか?

GitHub Actions は、GitHub に組み込まれた CI/CD 自動化ツールです。

簡単に言うと、GitHub リポジトリに構成ファイルを記述し、「いつ何かを行うか」を定義すると、GitHub が自動的にそれを実行します。

代码 push 上去 → GitHub 自动触发 → 跑测试 → 打包 → 部署
                (全自动化,不用你管)

2. 解決すべき問題は何ですか?

CI/CD の前に、次のようなプロジェクトをリリースする場合があります。

写代码 → 本地跑测试 → 本地打包 → 手动上传服务器 → 手动重启服务

多くの質問があります:

  • トラブル: すべてのリリースには、多数の手動手順が必要です。
  • 間違いが起こりやすい: テストの欠落、間違ったバージョンのパッケージ化、間違った環境へのデプロイメント
  • 連携できない:ローカル環境は人それぞれ違います。 「もう走れるよ。」

GitHub アクションを使用した後:

push 代码 → 自动跑测试 → 自动打包 → 自动部署 → 通知结果
  • 完全に自動化されており、一度構成すれば生涯にわたってメリットが得られます
  • 環境が統一され「ここなら走れる」という問題がなくなる
  • すべての提出は記録されるため、問題を簡単に追跡できます。

3. 中心となる概念

コンセプト 説明する 現地語
ワークフロー ワークフロー、1 部のコピー .yml 設定ファイルはワークフローです 自動化されたプロセス
イベント イベントのトリガー、どのような状況でワークフローがトリガーされるか いつランニングを始めるか
仕事 タスク、ワークフロー内に複数のジョブが存在する可能性があります 何をすべきか
ステップ ステップ。各ジョブには複数のステップがあり、順番に実行されます。 各ステップは具体的に何をするのでしょうか?
アクション コミュニティによって作成されたアクション、再利用可能なステップは直接使用できます 他人が書いたプラグイン
ランナー ランナー、ワークフローを実行するマシン 稼働中のサーバー

4. ファイルをどこに置くか?

GitHub Actions の構成ファイルは、ウェアハウスの次のディレクトリに配置されます。

你的仓库/
└── .github/
    └── workflows/
        ├── ci.yml          # 可以叫任意名字
        ├── deploy.yml
        └── release.yml

それぞれ .yml ファイルは独立したワークフローです。


5. 基本的な例: Java プロジェクト CI

段階的に、最初に最も単純なものを書きます。コードをプッシュした後にテストを自動的に実行する。

完全な構成

.github/workflows/ci.yml:

name: Java CI

# 什么时候触发
on:
  push:
    branches: [ main, develop ]   # push 到 main 或 develop 时触发
  pull_request:
    branches: [ main ]            # 提 PR 到 main 时触发

# 具体做什么
jobs:
  build:
    name: Build & Test
    runs-on: ubuntu-latest        # 在什么机器上跑(Ubuntu 最新版)

    steps:
      # 第一步:把代码拉下来
      - name: Checkout code
        uses: actions/checkout@v4

      # 第二步:装 JDK
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven              # 自动缓存 maven 依赖,下次更快

      # 第三步:跑测试
      - name: Run tests
        run: mvn test

      # 第四步:打包
      - name: Build package
        run: mvn package -DskipTests

      # 第五步:把打包结果上传(可以下载查看)
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: app-jar
          path: target/*.jar

一行ずつ説明

トリガー条件 on

on:
  push:
    branches: [ main ]

つまり、誰かがコードをメイン ブランチにプッシュすると、このワークフローが実行されます。

一般的なトリガーイベント:

イベント 説明する
push コードプッシュ
pull_request PR または PR アップデートを送信する
schedule タイミングトリガー(cron式)
workflow_dispatch 手動トリガー (ページ上のボタンをクリック)
release リリースが発行されるとき
issues 発行関連イベント

動作環境 runs-on

runs-on: ubuntu-latest

GitHub によって提供される無料のランナー:

  • ubuntu-latest(Linux)
  • windows-latest(Windows)
  • macos-latest(macOS)

独自のサーバー (自己ホスト型ランナー) を使用することもできます。

ステップ steps

steps:
  - uses: actions/checkout@v4    # uses = 用别人写好的 action
  - run: mvn test                # run = 执行一条命令
  • uses: コミュニティまたは公式アクションを引用、すぐに利用可能
  • run: シェルコマンドを実行して、必要なことを実行します。

6. 高度な例: サーバーへの自動展開

CI に基づいて、自動デプロイが追加されます。

.github/workflows/deploy.yml:

name: Deploy to Production

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    name: Build & Deploy
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven

      - name: Build
        run: mvn package -DskipTests

      # 通过 SSH 部署到服务器
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: 22
          script: |
            cd /opt/myapp
            git pull
            mvn package -DskipTests
            systemctl restart myapp
            echo "部署完成"

キーの設定方法

構成内で ${{ secrets.XXX }} GitHubのSecrets機能です。機密情報は yml の平文で記述することはできません。

設定方法:

  1. リポジトリを開く→設定→シークレットと変数→アクション
  2. 新しいリポジトリのシークレット
  3. 名前を入力してください SERVER_HOST値としてサーバー IP を入力します
  4. 同じように追加します SERVER_USER、SSH_PRIVATE_KEY

7. 高度な例: 複数のジョブ + マトリックス テスト

マルチバージョンテスト(マトリックス)

name: Multi-version Test

on: [push, pull_request]

jobs:
  test:
    name: Test on Java ${{ matrix.java }} / ${{ matrix.os }}
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        java: [ '11', '17', '21' ]
        os: [ ubuntu-latest, windows-latest ]

    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java }}
          distribution: 'temurin'

      - run: mvn test

これにより生成されます 3 × 2 = 6 つのタスク並列実行:

  • Java 11+ 無料
  • Java 11 + Windows
  • Java 17 以降 無料
  • …

ジョブ間に依存関係がある

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: mvn test

  build:
    needs: test          # 等 test 通过了才跑 build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: mvn package

  deploy:
    needs: build         # 等 build 通过了才跑 deploy
    runs-on: ubuntu-latest
    steps:
      - run: echo "部署中..."
test → build → deploy
 (串行,前面挂了后面就不跑了)

8. よく使用されるアクションの推奨事項

アクション 使用
actions/checkout@v4 プルコード(ほぼ必須)
actions/setup-java@v4 JDKのインストール
actions/setup-node@v4 Node.jsをインストールする
actions/upload-artifact@v4 ビルドプロダクトをアップロードする
actions/download-artifact@v4 ビルド製品をダウンロードする
actions/cache@v4 依存関係をキャッシュしてビルドを高速化する
appleboy/ssh-action@v1.0.3 サーバーに SSH で接続してコマンドを実行する
docker/build-push-action@v5 Docker イメージをビルドしてプッシュする
peaceiris/actions-gh-pages@v4 GitHub ページへのデプロイ

9. 実践的なスキル

1. 手動トリガー

on:
  workflow_dispatch:
    inputs:
      environment:
        description: '部署环境'
        required: true
        default: 'staging'
        type: choice
        options:
          - staging
          - production

構成後、「アクション」ページのボタンを手動でクリックして実行し、パラメーターを選択できます。

2. スケジュールされたタスク

on:
  schedule:
    - cron: '0 2 * * *'   # 每天凌晨 2 点跑(UTC 时间)

⚠️ cron は UTC 時間、北京時間はマイナス 8 時間です。たとえば、北京時間の午前 10 時 = UTC の午前 2 時です。

3.CIをスキップする

コミットメッセージ リガ [skip ci]このプッシュはワークフローをトリガーしません。

git commit -m "更新文档 [skip ci]"

4. 実行結果の表示

「ウェアハウス」ページ → 「アクション」タブ → すべてのワークフローの実行記録を確認できます。緑 = 成功、赤 = 失敗。をクリックすると、各ステップのログ出力が表示されます。

5. バッジ

README にバッジを追加してビルド ステータスを表示します。

![CI](

効果:GitHub Actions 详解 – FutureAI-Zeng このようなもの。


10. よくある落とし穴

  1. パスの問題: 各ステップはウェアハウスのルート ディレクトリから開始されます。相対パスに注意してください。
  2. タイムゾーンの問題:runner のデフォルトは UTC 時間です。スケジュールされたタスク用に変換することを忘れないでください。
  3. キャッシュの無効化: 依存関係が変更され、キャッシュが更新されていません。キャッシュをクリアして再試行してください。
  4. ネットワークの問題:runner は海外にあるため、国内リソースへのアクセスが遅くなるか、失敗する可能性があります。
  5. 機密情報が漏洩した: パスワードとキーを yml に決して書かず、シークレットを使用してください
  6. 仕事は独立している: 2 つのジョブ間でファイルが共有されることはありません。ファイルを転送するには、アーティファクトを使用します。

一文の要約:GitHub Actions は、GitHub に付属する自動ロボットです。 .github/workflows/ YMLを記述し、トリガー条件や実行ステップを設定することで、自動テスト、自動パッケージング、自動デプロイなどのさまざまなパイプライン動作を実現できます。



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *