コンテンツにスキップ
GitTree
Git ガイド3 分で読みました

プッシュする前にローカルで GitHub Actions と GitLab CI を実行する方法

ワークフローが成功するかどうかを確認するために「fix ci」コミットをプッシュするのをやめてください。 act または gitlab-ci-local を使用して、自分のコンピュータで Docker で同じジョブを数分で実行し、その後 1 回プッシュします。すぐに実行できるサンプルと視覚的なウォークスルーが含まれています。

作者 Kodmora

GitTree の背後にあるソフトウェア ハウス

発行済み 更新されました
  • CI/CD
  • GitHub
このページでは

自分のコンピュータで `act` を使用して GitHub Actions を実行し、gitlab-ci-local で GitLab CI を実行できます。どちらもパイプライン ファイルを読み取り、Docker コンテナで各ジョブを開始します。 Docker をインストールし、ランナーをインストールしてから、リポジトリのフォルダから act -j test または gitlab-ci-local test を実行します。失敗したジョブは、プッシュしてホストされたランナーを待った後ではなく、マシン上で数秒で失敗するようになりました。

このガイドでは、macOS、Windows、および Linux にインストールするもの、両方のランナーのコマンド、コピーできるサンプル ワークフロー、ローカル実行の制限、最初に遭遇するエラーについて説明します。このチュートリアルでは、私たちが作成した Git クライアントである GitTree を使用します。その ローカル パイプライン ページでは、インストールした内容がチェックされ、サンプル ファイルが書き込まれ、正確なコマンドが準備されます。ローカル パイプラインは GitTree の無料プランの一部であり、ホスティング アカウントは必要ありません。

CI パイプラインをローカルで実行する理由は何ですか?

ワークフロー ファイルに対するすべての変更は、実行するまでテストできないコードです。ローカル ランナーがない場合、ループは次のようになります: YAML の編集、コミット、プッシュ、ランナーの待機、ログの読み取り、繰り返し。各ラウンドには数分かかり、「再試行」のようなコミットの痕跡が残ります。ローカルで実行すると、ループが数秒に短縮され、履歴がクリーンな状態に保たれます。

プッシュアンドウェイトとローカル実行の比較
押して待ってくださいローカルで実行
フィードバック時間試行ごとの分とキュー時間画像がプルされてから数秒
必要なコミット試行ごとに 1 つそれが過ぎるまで何もしない
ホストされた CI 時間を使用するはいいいえ
本番CIと同じ環境はい近い、同一ではない (コンテナー、ホストされたシークレットなし)
オフラインでも動作しますいいえはい、最初のイメージをプルした後

必要なもの: Docker とランナー 1 人

どちらのランナーもコンテナ内のすべてのジョブを開始するため、Docker エンジンがインストールされて実行されている必要があります: macOS の Docker Desktop、OrbStack または Colima、Windows の Docker Desktop、Linux の Docker Engine または Docker Desktop。次に、ファイルのランナーをインストールします。

各ランナーの取り付け方法
ランナーパイプラインファイルmacOSWindowsLinux
act.github/workflows/*.ymlbrew install actwinget install nektos.actnektosact.com のインストール スクリプト
gitlab-ci-local.gitlab-ci.ymlnpm install -g gitlab-ci-localGitHub リリースの .exe (PATH 上)npm install -g gitlab-ci-local

gitlab-ci-local を npm でインストールする場合は、Node.js 18 以降が必要です。 docker info、act --version、および gitlab-ci-local --version の設定を確認します。docker info が失敗した場合は、何よりも前にエンジンを始動します。

act を使用してローカルで GitHub Actions を実行します

リポジトリのルート フォルダから act を実行します。最初にジョブをリストし、次に作業中のジョブを実行します。デフォルトでは、act は push イベントをシミュレートするため、他のイベントでのみ実行されるジョブにはイベント名が必要です。

# list workflows and jobs
act -l

# run one job from one workflow file
act -W .github/workflows/ci.yml -j test

# simulate a pull request instead of a push
act pull_request -j test

# pass a secret the job needs
act -j deploy -s NPM_TOKEN="$NPM_TOKEN"

# Apple silicon: run x86_64 images
act -j test --container-architecture linux/amd64

最初の実行では、どのランナー イメージを使用するかを尋ねられます。 中 はほとんどのプロジェクトに適しています。小さな画像にはホストされたランナーに含まれるツールが含まれておらず、完全な画像は非常に大きくなります。 「コマンドが見つかりません」というエラーでステップが失敗した場合は、-P ubuntu-latest=<image> でより大きなイメージを選択するか、ステップにツールをインストールしてください。

gitlab-ci-local を使用して GitLab CI をローカルで実行します

gitlab-ci-local は現在のフォルダーから .gitlab-ci.yml を読み取ります。引数を指定しないと、パイプライン全体が実行されます。 1 つのジョブを実行するにはジョブ名を付けます。 --list はジョブを実行せずに表示します。これは、YAML が解析することを簡単に確認する方法です。

# list jobs and stages
gitlab-ci-local --list

# run one job
gitlab-ci-local test

# pass a CI/CD variable
gitlab-ci-local test --variable API_URL=http://localhost:8080

GitTree からパイプラインをローカルで段階的に実行します

  1. オープンCI/CD

    リポジトリを開き、ツールバーの CI/CD を押します。アカウントまたは Pro が接続されていない場合、ビューは ローカル パイプライン で開きます。 1 つは、Run Locally… がヘッダーにあるものです。 [ツール] → [ローカル パイプラインの準備] を使用することもできます。

  2. 必要なものを確認してください

    必要なものには、Docker、act、および gitlab-ci-local がパス付きで 見つかりました、またはシステムのインストール コマンドに加えてリポジトリの信頼とターミナル シェル付きで 見つかりません として表示されます。不足しているものをインストールし、Check again を押します。

  3. サンプルを追加するか、ファイルを使用します

    このリポジトリ内のパイプライン ファイル には、ワークフローが 実行準備完了 または実行できない理由とともにリストされます。なしの場合、Add GitHub Actions Sample または Add GitLab CI Sample により、コメント付きスターター ファイルが書き込まれ、それが開きます。 GitTree は既存のファイルに上書きすることはありません。

  4. 準備して実行する

    ローカルで実行… を押し、ファイル、ジョブ、シェルを選択して、コマンドの準備 を選択します。 新しいターミナルに入力 は、Enter キーを押さずに新しいターミナルに正確なコマンドを入力します。それを読んでから、自分で Enter キーを押します。

GitTree のローカル パイプライン: Docker と動作が見つかり、不足しているもののインストール手順が実行され、サンプル ワークフローが実行可能になります。
GitTree のローカル パイプライン: Docker と動作が見つかり、不足しているもののインストール手順が実行され、サンプル ワークフローが実行可能になります。

開始するサンプル ワークフロー

これは、GitTree の GitHub Actions サンプルの形状です。ビルドとテストの 2 つのジョブで、act と GitHub で同じように機能します。コマンドを独自のものに置き換えます。

name: GitTree local check

on:
  push:
  pull_request:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: npm ci && npm run build

  test:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/checkout@v4
      - name: Test
        run: npm test

ローカル実行とホストされた CI の違い

  • GitHub または GitLab で構成された シークレットと変数は使用できません。仕事に必要なものを渡します。
  • 仮想マシンではなくコンテナ: systemd または完全な仮想マシンを必要とするサービスは、同じ方法では実行されません。
  • 画像はホストランナーとは異なります。ツールが欠落しているということは、ワークフローが壊れているのではなく、パッケージが欠落しているということです。
  • イベントはシミュレートされます: act のデフォルトは push です。再利用可能なワークフロー、インクルード、テンプレートは、エディターではなくランナーによって解決されます。
  • 合格したローカル実行はホストされた結果ではありません: ループが短縮されます。あなたのホストにはまだ最終決定権があります。

一般的なエラーと修正

人々が最初に遭遇するエラー
エラー原因修正
Docker デーモンに接続できませんエンジンがかかっていないDocker Desktop、OrbStack、Colima、または Docker サービスを開始します
ステップ内にコマンドが見つかりませんランナー イメージにツールがありません-P で大きなイメージを使用するか、1 つのステップでインストールしてください
ジョブは act では実行されませんact は push をシミュレートします。ジョブは別のイベントをリッスンしますイベントを渡します(例: act pull_request)
Appleシリコンでのexecフォーマットエラーarm64 Mac 上の x86_64 イメージ--container-architecture linux/amd64を追加
秘密は空ですホストされたシークレットはローカルではありません-s または --secret-file (act)、--variable (gitlab-ci-local) で渡します

プッシュする前に: 競合を予測し、シークレットを確認し、プッシュをプレビューします。

ローカル パイプラインの実行は、ジョブが通過するかどうかという 1 つの質問に答えます。他の 3 つのチェックは、CI のレポートが遅れているか、まったくレポートされていないかを検出し、それぞれのチェックも何かが送信される前にコンピュータ上で実行されます。

  1. マージを予測します。 git merge-tree --write-tree --name-only HEAD origin/main は、作業ツリーに影響を与えることなく、メモリ内でマージし、競合する可能性のあるファイルをリストします。 GitTree は同じ種類のチェックを行い、競合する可能性のあるマージの前に警告します。 Git マージ競合を解決する方法 を参照してください。
  2. シークレットを確認します。 コミットまたはプッシュの前に、GitTree は変更をローカルでスキャンして、可能性のあるトークン、パスワード、秘密鍵を探し、見つかった場合はダイアログを表示して停止します。リモートに到達するシークレットは回転する必要があるため、シークレットをキャッチする最も安価な瞬間は、プッシュする前です。警告は保証ではないため、送信した内容を確認してください。
  3. プッシュをプレビューします。 出荷プレビューには、プッシュで送信されるコミットとファイルがリストされ、読み取れるワークフロー ファイルごとに、このプッシュでパイプラインが実行される、実行される可能性がある、または実行されないかどうかとその理由が表示されます。

次に、ジョブをローカルで実行し、1 回プッシュします。 秘密の警告ガイド と 出荷プレビュー ガイド では、両方のダイアログについて詳しく説明しています。

Bitbucket Pipelines と Azure Pipelines についてはどうですか?

act または gitlab-ci-local と一致する、bitbucket-pipelines.yml または azure-pipelines.yml に対して維持されているローカル ランナーがありません。実際的なアプローチは、ビルドとテストのコマンドをスクリプト内に保持し、ホストされているパイプラインから呼び出して、ローカル実行専用の小さな GitHub Actions または GitLab CI ファイルを追加することです。 GitTree はこれらのファイルを ローカル ランナーなし としてマークし、まさにこれに対するサンプルを提供します。

次のステップ: パイプラインをローカルで実行するガイド ではすべてのボタンについて説明し、CI/CD の実行 ではホストされた実行、再実行、承認について説明し、ツール ランチャー では GitTree の他の組み込みツールをリストします。

よくある質問

GitHub Actions をローカルで実行できますか?

はい。 act はワークフロー ファイルを読み取り、コンピュータ上の Docker コンテナで各ジョブを実行します。 Docker と act をインストールし、リポジトリ フォルダーから act -j <job> を実行します。

actにはDockerが必要ですか?

はい。 act は Docker コンテナ内のすべてのジョブを開始するため、Docker Desktop、OrbStack、Colima、または Docker Engine などの Docker エンジンをインストールして実行する必要があります。

GitLab CI をローカルでテストするにはどうすればよいですか?

gitlab-ci-local をインストールし、Docker を起動してから、gitlab-ci-local --list を実行してジョブを確認し、gitlab-ci-local <job> を実行してジョブを実行します。各ジョブに image: を与えて、コンテナ内で実行できるようにします。

シークレットを act に渡すにはどうすればよいですか?

1 つのシークレットには -s NAME=value を使用し、シークレットのファイルには --secret-file を使用します。 .gitignore を使用して、そのファイルをリポジトリから除外します。

ローカル ランは GitHub のランナーと同じですか?

似ていますが、同じではありません。ローカル実行ではコンテナーと独自のイメージとシークレットを使用するため、一部のステップの動作が異なります。これらを使用してフィードバック ループを短縮し、ホストに最終呼び出しを行わせます。

パイプラインをローカルで実行するには GitTree Pro が必要ですか?

いいえ。ローカル パイプラインは GitTree の無料プランの一部であり、ホスティング アカウントは必要ありません。ホストされた CI/CD の実行、再実行、承認は Pro の一部です。

情報源

他の製品に関する申し立ては、2026年11月11日 の公式ページと照合して確認されました。価格と機能は変更されます。ベンダーのページが真実の情報源です。