正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

スケジュールされたパイプライン

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

パイプラインスケジュールを作成して、cronパターンに基づいて一定の間隔でパイプラインを実行します。コードの変更によってトリガーされるのではなく、時間ベースのスケジュールで実行する必要があるタスクには、パイプラインスケジュールを使用します。

コミットまたはマージリクエストによってトリガーされるパイプラインとは異なり、スケジュールされたパイプラインはコードの変更とは無関係に実行されます。これにより、デプロイを最新の状態に保つことや、定期的なメンテナンスの実行など、開発アクティビティーに関係なく実行する必要があるタスクに適しています。

パイプラインスケジュールを作成する

パイプラインスケジュールを作成すると、スケジュールオーナーになります。パイプラインはあなたの権限で実行され、あなたのアクセスレベルに基づいて保護環境にアクセスし、CI/CDジョブトークンを使用できます。

前提要件:

  • プロジェクトのデベロッパーロール以上を持っている必要があります。
  • 保護ブランチをターゲットとするスケジュールの場合、ターゲットブランチに対するマージ権限が必要です。
  • .gitlab-ci.ymlファイルの構文は有効である必要があります。スケジュールする前に、設定を検証することができます。

パイプラインスケジュールを作成するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. ビルド > パイプラインスケジュールを選択します。
  3. 新しいスケジュールを選択します。
  4. フィールドに入力します。
    • 間隔のパターン: 事前設定された間隔のいずれかを選択するか、cron形式でカスタム間隔を入力します。任意のcron値を使用できますが、スケジュールされたパイプラインは、インスタンスのスケジュールされたパイプラインの最大頻度よりも頻繁には実行できません。
    • ターゲットブランチまたはタグ: パイプラインのブランチまたはタグを選択します。
    • 入力: パイプラインのspec:inputsセクションで定義された入力の値をすべて設定します。これらの入力値は、スケジュールされたパイプラインが実行されるたびに使用されます。1つのスケジュールで可能な入力は最大20個です。
    • 変数: 任意の数のCI/CD変数をスケジュールに追加します。これらの変数は、スケジュールされたパイプラインが実行される場合にのみ使用でき、他のパイプラインの実行時には使用できません。パイプラインの設定には、変数よりも入力を使用することが推奨されます。入力の方がセキュリティと柔軟性に優れているためです。

プロジェクトがパイプラインスケジュールの最大数に達している場合は、別のスケジュールを追加する前に、未使用のスケジュールを削除してください。

パイプラインスケジュールを編集する

前提要件:

  • スケジュールオーナーであるか、スケジュールの所有権を取得する必要があります。
  • プロジェクトのデベロッパーロール以上を持っている必要があります。
  • 保護ブランチをターゲットとするスケジュールの場合、ターゲットブランチに対するマージ権限が必要です。
  • 保護タグで実行されるスケジュールの場合、保護タグを作成できる必要があります。

パイプラインスケジュールを編集するには、次のようにします:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. ビルド > パイプラインスケジュールを選択します。
  3. スケジュールの横にある編集 pencil )を選択します。
  4. 変更を加え、変更を保存を選択します。

手動で実行する

スケジュールされたパイプラインは、1分間に1回手動で実行できます。スケジュールされたパイプラインを手動で実行すると、スケジュールオーナーの権限ではなく、あなたの権限が使用されます。

次のスケジュールされた時間を待つ代わりに、パイプラインスケジュールをすぐにトリガーするには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. ビルド > パイプラインスケジュールを選択します。
  3. スケジュールの横にある実行 play )を選択します。

所有権を取得する

元のオーナーが利用できないためにパイプラインスケジュールが非アクティブになった場合は、所有権を取得できます。

スケジュールされたパイプラインは、スケジュールを所有するユーザーの権限で実行されます。

前提要件:

  • プロジェクトのメンテナー以上のロールを持っている必要があります。

スケジュールの所有権を取得するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. ビルド > パイプラインスケジュールを選択します。
  3. スケジュールの横にある所有権を取得するを選択します。

スケジュールされたパイプラインを表示する

すべてのプロジェクトでオーナーとなっているアクティブなパイプラインスケジュールを表示するには:

  1. 左側のサイドバーで、自分のアバターを選択します。
  2. プロファイルの編集を選択します。
  3. アカウントを選択します。
  4. 所有するスケジュールされたパイプラインまでスクロールします。

トラブルシューティング

パイプラインスケジュールを使用するときに、次の問題が発生する可能性があります。

スケジュールされたパイプラインが非アクティブになる

スケジュールされたパイプラインのステータスが予期せずInactiveに変更された場合、スケジュールオーナーがブロックされたか、プロジェクトから削除された可能性があります。

パイプラインスケジュールの所有権を取得して、再度アクティブにします。

システム負荷を防ぐためにパイプラインスケジュールを分散する

多数のパイプラインが同時に開始されることによる過度の負荷を防ぐために、パイプラインスケジュールを確認して分散させます:

  1. 次のコマンドを実行し、スケジュールデータを抽出およびフォーマットします:

    outfile=/tmp/gitlab_ci_schedules.tsv
    sudo gitlab-psql --command "
     COPY (SELECT
         ci_pipeline_schedules.cron,
         projects.path   AS project,
         users.email
     FROM ci_pipeline_schedules
     JOIN projects ON projects.id = ci_pipeline_schedules.project_id
     JOIN users    ON users.id    = ci_pipeline_schedules.owner_id
     ) TO '$outfile' CSV HEADER DELIMITER E'\t' ;"
    sort  "$outfile" | uniq -c | sort -n
  2. 出力をレビューして、よくあるcronパターンを特定します。たとえば、多くのスケジュールが毎時開始時に実行される場合があります(0 * * * *)。

  3. 特に大規模なリポジトリの場合は、スケジュールを調整して、時間を少しずつずらしたcronパターンを作成します。たとえば、毎正時に複数のスケジュールを実行するのではなく、1時間の中で分散させます(5 * * * *15 * * * *25 * * * *)。