5.3. ワークスペースを使用したシークレットの提供


ワークスペースを使用して、Git リポジトリーおよびコンテナーリポジトリー向けの認証シークレットを提供できます。

タスク名前付き Workspace を Task に設定し、ワークスペースのマウント先となるパスを指定できます。タスクを実行するときに、この名前のワークスペースとしてシークレットを指定します。OpenShift Pipelines がタスクを実行すると、シークレット内の情報がタスクで利用できるようになります。

ワークスペースを使用して認証シークレットを指定する場合は、シークレットのアノテーションは必要ありません。

5.3.1. ワークスペースを使用した Git の SSH 認証の設定

パイプラインが SSH キーで設定されたリポジトリーからリソースを取得するには、そのパイプラインの SSH ベースの認証を設定する必要があります。

パイプラインの SSH ベースの認証を設定するには、SSH 秘密鍵を使用して認証シークレットを作成し、タスクでこのシークレットの名前付きワークスペースを設定し、タスクの実行時にシークレットを指定します。

手順

  1. 次のコマンドを入力して、既存の .ssh ディレクトリー内のファイルから Git SSH 認証シークレットを作成します。

    $ oc create secret generic my-github-ssh-credentials \ 1
      --from-file=id_ed25519=/home/user/.ssh/id_ed25519 \ 2
      --from-file=known_hosts=/home/user/.ssh/known_hosts 3
    1
    シークレットの名前。この例では、my-github-ssh-credentials です。
    2
    秘密鍵ファイルの名前と完全パス名。この例では、/home/user/.ssh/id_ed25519 です。
    3
    既知のホストファイルの名前とフルパス名。この例では、/home/user/.ssh/known_hosts です。
  2. タスク定義で、Git 認証用の名前付きワークスペース (例: ssh-directory) を設定します。

    ワークスペースの定義例

    apiVersion: tekton.dev/v1beta1
    kind: Task
    metadata:
      name: git-clone
    spec:
      workspaces:
        - name: ssh-directory
          description: |
            A .ssh directory with private key, known_hosts, config, etc.

  3. タスクの手順では、$(workspaces.<workspace_name>.path) 環境変数のパスを使用してディレクトリーにアクセスします (例: $(workspaces.ssh-directory.path))
  4. タスクを実行するときは、tkn task start コマンドに --workspace 引数を含めて、名前付きワークスペースのシークレットを指定します。

    $ tkn task start <task_name>
          --workspace name=<workspace_name>,secret=<secret_name> 1
          # ...
    1
    <workspace_name> は、設定したワークスペースの名前に、<secret_name> は、作成したシークレットの名前に置き換えます。

認証に SSH 鍵を使用して Git リポジトリーをクローンするタスクの例

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: git-clone
spec:
  workspaces:
    - name: output
      description: The git repo will be cloned onto the volume backing this Workspace.
    - name: ssh-directory
      description: |
        A .ssh directory with private key, known_hosts, config, etc. Copied to
        the user's home before git commands are executed. Used to authenticate
        with the git remote when performing the clone. Binding a Secret to this
        Workspace is strongly recommended over other volume types
  params:
    - name: url
      description: Repository URL to clone from.
      type: string
    - name: revision
      description: Revision to checkout. (branch, tag, sha, ref, etc...)
      type: string
      default: ""
    - name: gitInitImage
      description: The image providing the git-init binary that this Task runs.
      type: string
      default: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.37.0"
  results:
    - name: commit
      description: The precise commit SHA that was fetched by this Task.
    - name: url
      description: The precise URL that was fetched by this Task.
  steps:
    - name: clone
      image: "$(params.gitInitImage)"
      script: |
        #!/usr/bin/env sh
        set -eu
        # This is necessary for recent version of git
        git config --global --add safe.directory '*'
        cp -R "$(workspaces.ssh-directory.path)" "${HOME}"/.ssh 1
        chmod 700 "${HOME}"/.ssh
        chmod -R 400 "${HOME}"/.ssh/*
        CHECKOUT_DIR="$(workspaces.output.path)/"
        /ko-app/git-init \
          -url="$(params.url)" \
          -revision="$(params.revision)" \
          -path="${CHECKOUT_DIR}"
        cd "${CHECKOUT_DIR}"
        RESULT_SHA="$(git rev-parse HEAD)"
        EXIT_CODE="$?"
        if [ "${EXIT_CODE}" != 0 ] ; then
          exit "${EXIT_CODE}"
        fi
        printf "%s" "${RESULT_SHA}" > "$(results.commit.path)"
        printf "%s" "$(params.url)" > "$(results.url.path)"

1
スクリプトは、シークレットの内容 (フォルダー形式) を ${HOME}/.ssh にコピーします。これは、ssh が認証情報を検索する標準フォルダーです。

タスクを実行するためのコマンドの例

$ tkn task start git-clone
      --param url=git@github.com:example-github-user/buildkit-tekton
      --workspace name=output,emptyDir=""
      --workspace name=ssh-directory,secret=my-github-ssh-credentials
      --use-param-defaults --showlog

5.3.2. ワークスペースを使用したコンテナーレジストリー認証の設定

パイプラインがレジストリーからコンテナーイメージを取得するには、そのレジストリーの認証を設定する必要があります。

コンテナーレジストリーの認証を設定するには、Docker 設定ファイルを使用して認証シークレットを作成し、タスクでこのシークレットの名前付きワークスペースを設定し、タスクの実行時にシークレットを指定します。

手順

  1. 次のコマンドを入力して、認証情報を含めて、既存の config.json ファイルからコンテナーレジストリー認証シークレットを作成します。

    $ oc create secret generic my-registry-credentials \ 1
      --from-file=config.json=/home/user/credentials/config.json 2
    1
    シークレットの名前。この例では、my-registry-credentials です。
    2
    config.json ファイルのパス名。この例では、/home/user/credentials/config.json です。
  2. タスク定義で、Git 認証用の名前付きワークスペース (例: ssh-directory) を設定します。

    ワークスペースの定義例

    apiVersion: tekton.dev/v1beta1
    kind: Task
    metadata:
      name: skopeo-copy
    spec:
      workspaces:
        - name: dockerconfig
          description: Includes a docker `config.json`
    # ...

  3. タスクの手順では、$(workspaces.<workspace_name>.path) 環境変数のパス (例: $(workspaces.dockerconfig.path)) を使用してディレクトリーにアクセスします。
  4. タスクを実行するには、tkn task start コマンドに --workspace 引数を含めて、名前付きワークスペースのシークレットを指定します。

    $ tkn task start <task_name>
          --workspace name=<workspace_name>,secret=<secret_name> 1
          # ...
    1
    <workspace_name> は、設定したワークスペースの名前に、<secret_name> は、作成したシークレットの名前に置き換えます。

Skopeo を使用してコンテナーリポジトリーからイメージをコピーするタスクの例

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: skopeo-copy
spec:
  workspaces:
    - name: dockerconfig 1
      description: Includes a docker `config.json`
  steps:
    - name: clone
      image: quay.io/skopeo/stable:v1.8.0
      env:
      - name: DOCKER_CONFIG
        value: $(workspaces.dockerconfig.path) 2
      script: |
        #!/usr/bin/env sh
        set -eu
        skopeo copy docker://docker.io/library/ubuntu:latest docker://quay.io/example_repository/ubuntu-copy:latest

1
config.json ファイルが含まれるワークスペースの名前。
2
DOCKER_CONFIG 環境変数は、dockerconfig ワークスペース内の config.json ファイルの場所を指します。Skopeo は、この環境変数を使用して認証情報を取得します。

タスクを実行するためのコマンドの例

$ tkn task start skopeo-copy
      --workspace name=dockerconfig,secret=my-registry-credentials
      --use-param-defaults --showlog

5.3.3. ワークスペースを使用してシークレットを特定のステップのみに限定する手順

ワークスペースを使用して認証シークレットを提供し、タスクでワークスペースを定義すると、デフォルトでは、そのワークスペースはタスク内のすべてのステップで使用できるようになります。

シークレットを特定のステップに制限するには、タスク仕様とステップ仕様の両方でワークスペースを定義します。

手順

  • 次の例のように、タスク仕様とステップ仕様の両方の下に、workspaces: 定義を追加します。

    1 つのステップのみが認証情報ワークスペースにアクセスできるタスク定義の例

    apiVersion: tekton.dev/v1beta1
    kind: Task
    metadata:
      name: git-clone-build
    spec:
      workspaces: 1
        - name: ssh-directory
          description: |
            A .ssh directory with private key, known_hosts, config, etc.
    # ...
      steps:
        - name: clone
          workspaces: 2
            - name: ssh-directory
    # ...
        - name: build 3
    # ...

    1
    タスク仕様の ssh-directory ワークスペースの定義。
    2
    ステップ仕様の ssh-directory ワークスペースの定義。認証情報は、このステップでは $(workspaces.ssh-directory.path) ディレクトリーとして利用できます。
    3
    このステップには ssh-directory ワークスペースの定義が含まれていないため、認証情報は使用できません。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.