条件付き実行とジョブの依存関係
GitHub Actionsのワークフローで、if条件、needsキーワード、式、ステータスチェック関数を使ってステップやジョブの実行タイミングを制御します。
「条件付き実行とジョブの依存関係」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
条件が重要な理由
すべてのステップを毎回実行する必要はありません。たとえば、デプロイステップをmainブランチでのみ実行したり、通知ステップを何かが失敗した場合にのみ実行したりできます。
GitHub Actions では、任意のステップやジョブにif 条件を付けて、実行するかどうかを制御できます。
if キー
ステップにif:キーを追加します。式の評価結果がtrueの場合にのみ、そのステップが実行されます。
if内の式には${{ }}のラッパーは必要ありませんが、付けることもできます。
steps:
- name: Deploy
if: github.ref == 'refs/heads/main'
run: ./deploy.shコンテキストオブジェクト
実行の内容を表すコンテキストオブジェクトから読み取る条件は次のとおりです。
github— イベント、ref、アクター、shaenv— 環境変数jobとsteps— 以前の処理のステータスrunner— OS とアーキテクチャ
たとえば、github.event_name を参照すると、push と pull_request のどちらが実行をトリガーしたかがわかります。
ステータスチェック関数
デフォルトでは、以前のステップが失敗すると、後続のステップはスキップされます。これを上書きするには、ステータス関数を使用します。
success()— 以前のステップが1つも失敗していない場合にtrue(デフォルト)failure()— 以前のステップのいずれかが失敗した場合にtruealways()— 状況にかかわらず実行cancelled()— 実行がキャンセルされた場合にtrue
- name: Notify on failure
if: failure()
run: echo 'Build failed, sending alert'常に実行するクリーンアップ
よく使われるパターンに、以前のステップが失敗しても実行する必要があるクリーンアップステップがあります。if: always()を使用します。
これにより、一時リソース、コンテナ、テストレポートが結果にかかわらず処理されることが保証されます。
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: logs
path: ./logs<code>needs</code> によるジョブの依存関係
needs キーワードを使用すると、あるジョブをほかのジョブの完了まで待機させられます。指定しない場合、ジョブは並列に実行されます。
needs に指定されたジョブは、依存するジョブが開始する前に正常終了していなければなりません。
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- run: ./deploy.sh複数の依存関係
needs にリストを渡すことで、1つのジョブを複数のジョブに依存させられます。そのジョブは、依存先のすべてが完了するまで待機します。
これにより、並列に実行されたジョブがすべて成功した後にのみ最終ジョブを実行する、ファンインパターンを構築できます。
release:
needs: [lint, test, build]
runs-on: ubuntu-latest
steps:
- run: echo 'all checks passed'条件付きジョブ
if キーはステップだけでなく、ジョブにも使用できます。ジョブレベルの条件によって、ジョブ全体を実行するかどうかが決まります。
ここでは、テストに依存したまま、main へのプッシュの場合にのみデプロイジョブが実行されます。
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: ./deploy.shジョブの出力を使用する
ジョブは outputs を介して後続のジョブにデータを渡せます。依存するジョブは、needs コンテキストを通じてそのデータを読み取ります。
これにより、バージョンが変更されたかどうかなど、前の処理で計算した値に条件を依存させられます。
check:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.diff.outputs.changed }}
steps:
- id: diff
run: echo 'changed=true' >> $GITHUB_OUTPUT条件の組み合わせ
&&(かつ)、||(または)、!(否定)を使って式を組み合わせられます。
この例では、フォークではないリポジトリからの、成功したmainへのプッシュの場合にのみ実行されます。
if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'<code>needs</code> と <code>if: always()</code> の併用
注意が必要です。needs を持つジョブは、依存先が失敗するとスキップされます。依存先にかかわらず最終的なレポートジョブを実行するには、needs と if: always() を組み合わせます。
その中で needs.<job>.result を調べ、何をレポートするかを決められます。
report:
needs: [test, build]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo ${{ needs.test.result }}理解度チェック
条件付き実行についての理解度を確認しましょう。
まとめ
条件と依存関係を使ってワークフローの流れを制御する方法を学びました。
ifは式に基づいてステップとジョブの実行を制御しますfailure()やalways()などのステータス関数は、失敗時のスキップを上書きしますneedsは実行順序とファンインパターンを作成します- ジョブの
outputsは、後続の条件に値を渡します
これらの基本要素によって、正確で効率的なパイプラインを構築できます。
よくある質問
「条件付き実行とジョブの依存関係」レッスンは無料ですか?
はい。「条件付き実行とジョブの依存関係」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「条件付き実行とジョブの依存関係」で何を学びますか?
GitHub Actionsのワークフローで、if条件、needsキーワード、式、ステータスチェック関数を使ってステップやジョブの実行タイミングを制御します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「条件付き実行とジョブの依存関係」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 複数環境向けのマトリックスビルド
- 依存関係のキャッシュによる高速化
- 再利用可能なワークフローと Actions
- 条件付き実行とジョブの依存関係