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

フロー実行用のイメージを設定する

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

CI/CDで実行されるフローは、Dockerイメージ内で実行されます。デフォルトでは、GitLabはフローが必要とするツールとネットワーク保護を含むイメージを提供します。プロジェクトの依存関係を追加したり、コンプライアンス要件を満たしたり、オフライン環境でフローを実行したりするために、デフォルトのイメージをカスタムまたは強化されたイメージに置き換えることができます。

デフォルトのDockerイメージを変更する

CI/CDで実行されるすべてのフローは、GitLabが提供するDockerイメージを使用します。このDockerイメージは、Anthropic Sandbox Runtime(srtを使用して、ネットワーク保護を自動的に含みます。

特定の依存関係やツールを持つ複雑なプロジェクトがある場合、Dockerイメージを変更できます。

デフォルトのDockerイメージを変更するには、agent-config.ymlファイルに次の設定を追加します:

image: YOUR_DOCKER_IMAGE

例:

image: python:3.11-slim
image: node:20-alpine

ネットワーク保護を追加

イメージでネットワーク保護を使用するには、お好みのバージョンでsrtをDockerイメージに追加します:

# Install srt sandboxing with cache clearing and verification
ARG SANDBOX_RUNTIME_VERSION=0.0.20
RUN npm cache clean --force && \
    npm install -g @anthropic-ai/sandbox-runtime@${SANDBOX_RUNTIME_VERSION} && \
    test -s "$(npm root -g)/@anthropic-ai/sandbox-runtime/package.json" && \
    srt --version

SRTとカスタムイメージへのインストール方法の詳細については、リモート実行環境サンドボックスを参照してください。

カスタムイメージを使用する

カスタムDockerイメージを使用する場合は、エージェントが正しく機能するために、次のコマンドが利用可能であることを確認してください:

  • git
  • npmと互換性のあるNode.jsのバージョン@gitlab/duo-cli。詳細については、GitLab Duo CLIの前提条件を参照してください。

ほとんどのベースイメージには、デフォルトでこれらのコマンドが含まれています。ただし、最小構成イメージ(alpineバリアントなど)では、明示的にインストールする必要がある場合があります。必要に応じて、セットアップスクリプトの設定で不足しているコマンドをインストールできます。

GitLab 18.9以前では、カスタムイメージの新しいバージョンのgitでフローが失敗する可能性がある既知のイシュー(587996)があります。このイシューは、@gitlab/duo-cliバージョン8.71.0で解決されています。

@gitlab/duo-cliバージョン8.71.0以前をご利用の場合、新しいGitのバージョンでフローが失敗するのを避けるために、以下のいずれかを実行できます:

  • カスタムイメージでGitバージョン2.43.7以前を使用する
  • @gitlab/duo-cliバージョン8.71.0を使用します。

さらに、エージェントがフロー実行中に行うツール呼び出しによっては、他の一般的なユーティリティが必要となる場合があります。

たとえば、Alpineベースのイメージを使用する場合:

image: python:3.11-alpine
setup_script:
  - apk add --update git nodejs npm

セキュリティとパフォーマンス

カスタムDockerイメージを使用する場合、環境サンドボックスは、Anthropic Sandbox Runtime(SRT)がカスタムイメージに含まれている場合にのみ適用されます。SRTが含まれていない場合、フローはRunnerから到達可能な任意のドメインとフルファイルシステムにアクセスできます。

カスタムイメージでネットワーク分離が必要な場合は、イメージにSRTをインストールし、ネットワークポリシーを設定するか、Runnerでネットワークレベルの制御(例えば、ファイアウォールルールやネットワークポリシー)を設定してください。

ジョブの起動時間を約15~20秒短縮するには、@gitlab/duo-cli NPMパッケージとglab CLIをカスタムイメージに含めます。強化されたイメージには、両方のツールがプリインストールされています。

オフライン環境でカスタムイメージを使用する

Runnerが外部レジストリに到達できないオフライン環境では、@gitlab/duo-cliを含むカスタムexecutorイメージを事前にビルドできます。GitLab Duo CLIがすでにイメージに存在する場合、フローの起動はnpmダウンロードステップをスキップします。

前提条件:

  • 管理者アクセス権。
  • GitLab 18.9以降。
  • イメージをビルドし、アーティファクトをダウンロードするためのオンラインマシンへのアクセス。

オフライン環境のフローを設定するには:

  1. オンラインマシンで、GitLab Duo CLIを含むカスタムイメージをビルドします:

    FROM registry.gitlab.com/gitlab-org/duo-workflow/default-docker-image/workflow-generic-image:v0.0.6
    RUN npm install -g @gitlab/duo-cli@8.86.0

    あるいは、npmを完全に避けるために、スタンドアロンバイナリをGitLabパッケージレジストリからダウンロードします:

    FROM registry.gitlab.com/gitlab-org/duo-workflow/default-docker-image/workflow-generic-image:v0.0.6
    COPY duo-linux-x64 /usr/bin/duo
    RUN chmod +x /usr/bin/duo

    スタンドアロンバイナリをダウンロードするには、次のコマンドを実行します:

    curl --location "https://gitlab.com/api/v4/projects/46519181/packages/generic/duo-cli/8.86.0/duo-linux-x64" \
      --output duo-linux-x64
  2. イメージをオフライン環境に転送します。例えば、Dockerを使用する場合、次のコマンドを実行します:

    # On an online machine
    docker save my-duo-executor:latest -o duo-executor.tar
    
    # Transfer `duo-executor.tar` to the offline environment
    
    # On an offline machine
    docker load -i duo-executor.tar
  3. イメージを内部コンテナレジストリにプッシュします。

  4. カスタムイメージのレジストリを設定します:

    1. 右上隅で、管理者を選択します。
    2. 左側のサイドバーで、GitLab Duoを選択します。
    3. 設定の変更を選択します。
    4. イメージレジストリテキストボックスに、内部レジストリのURL(例: registry.internal.example.com)を入力します。
  5. 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。

  6. カスタムイメージを使用するには、agent-config.ymlファイルを更新します:

    image: registry.internal.example.com/duo-executor:latest

Red Hat Universal Base Image 9 Minimalを使用する

GitLabは、Red Hat Universal Base Image(UBI)9 Minimalをベースイメージとした、強化された最小限のイメージバリアントを提供します。

環境で以下が必要な場合に、強化されたイメージを使用します:

  • Red Hat UBIベースイメージ。例えば、FedRAMPやエンタープライズコンプライアンスの場合。
  • デフォルトでは非rootコンテナ実行。
  • Agent Platform自体が必要とする言語ランタイムを超えない最小限のアタックサーフェス。
  • フロー実行時にインターネットへの送信アクセスなし(すべてのAgent Platformの依存関係がプリインストール済み)

強化されたイメージはregistry.gitlab.com/gitlab-org/duo-workflow/default-docker-image/workflow-generic-image-hardenedで公開されています。

linux/amd64linux/arm64の両方のためにビルドされ、次のタグスキームを使用します:

  • 各ビルド用の:<short-sha>
  • 各リリース用の:<git-tag>

前提条件:

  • GitLab 18.10以降

強化されたイメージを使用するには、agent-config.ymlで設定します:

image: registry.gitlab.com/gitlab-org/duo-workflow/default-docker-image/workflow-generic-image-hardened:<tag>

イメージの内容

コンポーネントバージョン
ベースイメージRed Hat UBI 9 Minimal
gitUBI 9 stock
git-lfsUBI 9 stock
Node.js20(UBI 9モジュールストリーム)
npmNode.js 20とバンドルされています。
@gitlab/duo-cliプリインストール済み
glab(GitLab CLI)プリインストール済み
ランタイムユーザー非root、UID 1001(duo-runner

イメージには@gitlab/duo-cliglabが含まれています。フロー実行時にregistry.npmjs.orgまたはregistry.gitlab.comへの送信アクセスは必要ありません。

追加のパッケージを追加

強化されたイメージはUID 1001(duo-runner)として実行されます。agent-config.yml内のsetup_scriptもこの非rootユーザーとして実行されるため、microdnfでシステムパッケージをインストールすることはできません。

言語ランタイムまたはシステムパッケージを追加するには:

  1. イメージを独自のFROMレイヤーで拡張します:

    FROM registry.gitlab.com/gitlab-org/duo-workflow/default-docker-image/workflow-generic-image-hardened:<tag>
    
    USER root
    RUN microdnf install -y python3.12 python3.12-pip && microdnf clean all
    USER 1001
  2. rootアクセスを必要としないプロジェクトの依存関係にはsetup_scriptを使用します。例: pip install --usernpm install