2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

無料ユーザーも使える!GitLab 18.10 新機能「CI/CD Job Inputs」でパイプラインをもっと柔軟に

2
Posted at

無料ユーザーも使える!GitLab 18.10 新機能「CI/CD Job Inputs」でパイプラインをもっと柔軟に

はじめに

2026年3月19日にリリースされた GitLab 18.10 には、フリープランのユーザーでも今日からすぐ使える便利な新機能が含まれています。

その中でも特に注目したいのが 「Use Runtime Inputs with CI/CD Jobs(ジョブへのランタイム入力)」 です。

「CI/CDパイプラインをもっと柔軟に使いたい」「環境ごとに同じYAMLを書き直すのが面倒」と感じたことはありませんか?この機能を使えば、そのモヤモヤがスッキリ解消されます。


対象プラン

プラン 利用可否
Free 使えます
Premium 使えます
Ultimate 使えます

GitLab.com / GitLab Self-Managed / GitLab Dedicated すべてで利用可能です。

なお、GitLab Runner 18.9 以降 が必要です。


「CI/CD Job Inputs」とは?

一言でいうと、ジョブが受け付ける入力パラメータを明示的に定義できる仕組み です。通常のパイプライン実行ではデフォルト値で自動的に動作し、手動実行・再試行のときだけ値を上書きできます。

これまでも CI/CD 変数(Variables)を使って動的な設定はできましたが、変数にはいくつかの使いにくさがありました。

  • 変数のオーバーライドの優先順位が複雑でわかりにくい
  • 型の制約がないため、想定外の値が入ってもすぐには気づけない
  • 「このジョブはどんな値を受け付けるか」が明示的でない

Job Inputs はこれらの課題をまとめて解決してくれます。


CI/CD Variables との比較

項目 CI/CD Variables Job Inputs
型の検証 なし あり(string / number / boolean / array)
デフォルト値 任意 必須
許容値の制限 できない options で指定可能
正規表現バリデーション できない regex で指定可能
再実行時の値変更 できない できる
スコープ パイプライン全体 そのジョブのみ

基本的な使い方

定義方法

ジョブ定義に inputs: キーワードを追加し、各入力に default を必ず設定します。
値の参照には ${{ job.inputs.INPUT_NAME }} という構文を使います。

deploy_job:
  inputs:
    target_env:
      default: staging
      options: [staging, production]
    replicas:
      type: number
      default: 3
    debug_mode:
      type: boolean
      default: false
  script:
    - echo "Deploying to ${{ job.inputs.target_env }}"
    - echo "Replicas: ${{ job.inputs.replicas }}"
    - if [ "${{ job.inputs.debug_mode }}" == "true" ]; then set -x; fi
    - ./deploy.sh

入力の設定項目

キーワード 必須 説明
default 必須 デフォルト値。必ず設定する
type 任意 string(デフォルト)/ number / boolean / array
description 任意 入力の説明文(UIに表示される)
options 任意 許容する値のリスト
regex 任意 入力値を検証する正規表現

実用的なサンプル集

デプロイジョブ

本番環境への誤デプロイを防ぎつつ、柔軟な運用を実現できます。

deploy:
  when: manual
  inputs:
    target_env:
      default: staging
      description: デプロイ先の環境
      options: [staging, production]
    version:
      default: latest
      description: デプロイするアプリのバージョン
  script:
    - echo "Deploying ${{ job.inputs.version }} to ${{ job.inputs.target_env }}"
    - ./deploy.sh --env ${{ job.inputs.target_env }} --version ${{ job.inputs.version }}

テストジョブ(バリデーション付き)

テストスイートや並列数を実行時に指定できます。

integration_tests:
  inputs:
    test_suite:
      default: smoke
      description: 実行するテストスイート
      options: [smoke, regression, full]
    parallel_jobs:
      type: number
      default: 5
      description: 並列実行数
    enable_debug:
      type: boolean
      default: false
      description: デバッグログを有効にする
    tags:
      type: array
      default: ["critical"]
      description: 実行するテストタグ
  script:
    - if [ "${{ job.inputs.enable_debug }}" == "true" ]; then export DEBUG=1; fi
    - ./run_tests.sh
        --suite ${{ job.inputs.test_suite }}
        --parallel ${{ job.inputs.parallel_jobs }}
        --tags '${{ job.inputs.tags }}'

DBマイグレーション(安全チェック付き)

dry_run フラグと regex バリデーションを組み合わせた安全な設計です。

migrate_database:
  when: manual
  inputs:
    target_db:
      default: development
      description: 対象データベース環境
      options: [development, staging, production]
    migration_name:
      default: ""
      description: 実行するマイグレーション名(空白で全件)
      regex: ^[a-zA-Z0-9_]*$
    dry_run:
      type: boolean
      default: true
      description: ドライランモード(変更を適用しない)
  script:
    - echo "Running migrations on ${{ job.inputs.target_db }}"
    - |
      if [ "${{ job.inputs.dry_run }}" == "true" ]; then
        echo "DRY RUN MODE - no changes will be applied"
        MIGRATION_FLAGS="--dry-run"
      fi
    - |
      if [ -n "${{ job.inputs.migration_name }}" ]; then
        ./migrate.sh $MIGRATION_FLAGS --migration ${{ job.inputs.migration_name }}
      else
        ./migrate.sh $MIGRATION_FLAGS --all
      fi

GUIからの操作方法

手動ジョブを入力値付きで実行する

  1. パイプラインまたはジョブ一覧を開く
  2. 手動ジョブの名前をクリック(「実行」ボタンではなく)
  3. 表示されたフォームに入力値を指定
  4. 「Run job」を選択

異なる入力値でジョブを再試行する

  1. ジョブ詳細ページを開く
  2. 「Retry job with modified values」を選択
  3. 前回の値がプリフィルされているので、変更したい箇所だけ修正
  4. 「Run job again」を選択

APIからの操作方法

手動ジョブの実行:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "job_inputs": {
      "environment": "staging",
      "version": "v2.1.0"
    }
  }' \
  "https://gitlab.example.com/api/v4/projects/1/jobs/456/play"

ジョブの再試行:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_token>" \
  --header "Content-Type: application/json" \
  --data '{
    "job_inputs": {
      "environment": "production",
      "replicas": 10
    }
  }' \
  "https://gitlab.example.com/api/v4/projects/1/jobs/123/retry"

使える場所・使えない場所

使える場所

${{ job.inputs.INPUT_NAME }} が使えるジョブキーワードは以下の通りです。

  • script / before_script / after_script
  • artifacts
  • cache
  • image
  • services

使えない場所

パイプライン作成時に評価される設定には使えません。

  • ジョブ名
  • stage
  • rules
  • include

これらを動的に設定したい場合は、CI/CD pipeline configuration inputs(spec:inputs: / $[[ inputs.* ]])を使いましょう。


よくあるエラーと対処法

input must have a default value

すべての Job Input には default が必須です。

# NG
my_job:
  inputs:
    target_env:
      options: [staging, production]

# OK
my_job:
  inputs:
    target_env:
      default: staging
      options: [staging, production]

unexpected value(バリデーションエラー)

  • options を使っている場合:値が完全一致(大文字小文字も区別)しているか確認
  • regex を使っている場合:パターンが入力値にマッチするか確認
  • type: number の場合:数値以外の文字列が渡されていないか確認
  • type: array の場合:API経由ではJSON配列形式(["a", "b"])で渡す必要あり

まとめ

GitLab 18.10 の Job Inputs は、フリープランを含む全ユーザーが今すぐ使える実践的な新機能です。

  • 型安全な入力定義でヒューマンエラーを防げる
  • optionsregex で許容値を絞り込める
  • 再試行のたびに値を変更でき、デバッグや再デプロイが楽になる
  • Runner 18.9 以降さえあれば追加コスト不要

「パイプラインを環境ごとに何個も書いている」「手動ジョブの設定変更のたびにYAMLを編集している」という方は、ぜひ Job Inputs に切り替えてみてください。GitLab をもっと使いこなすための、小さくて確実な一歩になるはずです。


参考リンク

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?