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 の平文で記述することはできません。
設定方法:
- リポジトリを開く→設定→シークレットと変数→アクション
- 新しいリポジトリのシークレット
- 名前を入力してください
SERVER_HOST値としてサーバー IP を入力します - 同じように追加します
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](
効果: このようなもの。
10. よくある落とし穴
- パスの問題: 各ステップはウェアハウスのルート ディレクトリから開始されます。相対パスに注意してください。
- タイムゾーンの問題:runner のデフォルトは UTC 時間です。スケジュールされたタスク用に変換することを忘れないでください。
- キャッシュの無効化: 依存関係が変更され、キャッシュが更新されていません。キャッシュをクリアして再試行してください。
- ネットワークの問題:runner は海外にあるため、国内リソースへのアクセスが遅くなるか、失敗する可能性があります。
- 機密情報が漏洩した: パスワードとキーを yml に決して書かず、シークレットを使用してください
- 仕事は独立している: 2 つのジョブ間でファイルが共有されることはありません。ファイルを転送するには、アーティファクトを使用します。
一文の要約:GitHub Actions は、GitHub に付属する自動ロボットです。 .github/workflows/ YMLを記述し、トリガー条件や実行ステップを設定することで、自動テスト、自動パッケージング、自動デプロイなどのさまざまなパイプライン動作を実現できます。