すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:CI パイプラインでのプライベート Git リポジトリのクローン

最終更新日:Jun 17, 2026

ACK One の CI パイプラインで、Git アーティファクトまたは環境変数を使用してプライベート Git リポジトリをクローンします。

3 つの方法があります。

前提条件

以下があることを確認してください:

方法の選択

方法 認証 使用するケース
Git アーティファクトによるクローン (ユーザー名とパスワード) ユーザー名 + パスワードまたはトークン HTTPS リポジトリ。認証情報がすでにトークンとして管理されている場合
Git アーティファクトによるクローン (SSH キー) SSH 秘密鍵 SSH 形式のリポジトリ URL。キーベースの認証を推奨する場合
環境変数の認証情報によるクローン 環境変数によるユーザー名 + パスワードまたはトークン DAG タスクが不要なシンプルな設定。単一タスクのワークフロー

すべての方法で、リポジトリの認証情報用に git-creds という名前の Secret が必要です。まず Secret を作成してから、選択したテンプレートを適用してください。

ワークフロークラスターへの認証情報の保存

ワークフロークラスターに git-creds という名前の Secret を作成し、リポジトリのユーザー名、パスワード (またはトークン)、および SSH キーを保存してください。

プレースホルダーを実際の値に置き換えてください:

プレースホルダー 説明
${username} Git リポジトリのユーザー名 demo
${password or token} パスワードまたはパーソナルアクセス トークン。GitHub や同様のプロバイダーでは、パスワードの代わりにトークンが必要です。 ghp_GePB****************d407
${ssh private key path} SSH 秘密鍵ファイルへのローカルパス $HOME/.ssh/id_rsa
kubectl create secret generic git-creds \
  --from-literal="username=${username}" \
  --from-literal="password=${password or token}" \
  --from-file=ssh-private-key=${ssh private key path}

# 例:
# kubectl create secret generic git-creds \
#   --from-literal="username=demo" \
#   --from-literal="password=ghp_GePB****************d407" \
#   --from-file=ssh-private-key=$HOME/.ssh/id_rsa
SSH 認証の場合、まずキーペアを生成し、公開鍵を Git リポジトリに追加してください。お使いの Git プロバイダーのドキュメントをご参照ください: GitHub | GitLab

Git アーティファクトによるクローン (ユーザー名とパスワード)

テンプレートは、git-creds Secret から usernamepassword を読み取る git-clone タスクを、git-checkout-pr の依存関係として追加します。

どの方法でも、事前定義されたワークフローテンプレートgit-checkout-pr タスクをベースにしますが、git-checkout-prcommand パラメーター内のシェルスクリプトは、認証方法に合わせて変更されます。

ワークフローテンプレートの適用

次の ClusterWorkflowTemplate をワークフロークラスターに適用してください:

apiVersion: argoproj.io/v1alpha1
kind: ClusterWorkflowTemplate
metadata:
  name: ci-git-artifact
spec:
  entrypoint: main
  volumes:
  - name: run-test
    emptyDir: {}
  - name: workdir
    persistentVolumeClaim:
      claimName: pvc-nas
  - name: docker-config
    secret:
      secretName: docker-config
  arguments:
    parameters:
    - name: repo_url
      value: ""
    - name: repo_name
      value: ""
    - name: target_branch
      value: "main"
  templates:
    - name: main
      dag:
        tasks:
          - name: git-clone
            arguments:
              artifacts:
              - name: git-repo
                path: /workdir
                git:
                  repo: "{{arguments.parameters.repo_url}}"
                  revision: main
                  usernameSecret:
                    name: git-creds
                    key: username
                  passwordSecret:
                    name: git-creds
                    key: password
            inline:
              container:
                image: golang:1.10
                command:
                - sh
                - -c
                - |
                  cd {{workflow.parameters.repo_name}}
                  git status && ls
                workingDir: /workdir
                volumeMounts:
                - name: "workdir"
                  mountPath: /workdir
          - name: git-checkout-pr
            inline:
              container:
                image: alpine:latest
                command:
                  - sh
                  - -c
                  - |
                    set -eu

                    apk --update add git

                    cd /workdir/{{workflow.parameters.repo_name}}

                    echo "Start to Checkout target branch" {{workflow.parameters.target_branch}}
                    git fetch origin
                    git checkout {{workflow.parameters.target_branch}}

                    echo "Get commit id"
                    git rev-parse --short HEAD > /workdir/{{workflow.parameters.repo_name}}-commitid.txt
                    commitId=$(cat /workdir/{{workflow.parameters.repo_name}}-commitid.txt)
                    echo "Commit id is got: "$commitId

                    echo "Git Checkout Complete."
                volumeMounts:
                - name: "workdir"
                  mountPath: /workdir
                resources:
                  requests:
                    memory: 1Gi
                    cpu: 1
                activeDeadlineSeconds: 1200
            depends: git-clone

ワークフローの送信

CI パイプラインの設定に合わせてワークフローパラメーターを設定し、ワークフローを送信してください。

image

Git アーティファクトによるクローン (SSH キー)

前の方法と似ていますが、2 つの違いがあります:

  • git-clone タスクは、git-creds Secret から ssh-private-key のみを読み取ります。

  • repo_url パラメーターは SSH 形式である必要があります。例: git@github.com:ivan-cai/gitops-demo-private.git

ワークフローテンプレートの適用

次の ClusterWorkflowTemplate をワークフロークラスターに適用してください:

apiVersion: argoproj.io/v1alpha1
kind: ClusterWorkflowTemplate
metadata:
  name: ci-git-artifact-sshkey
spec:
  entrypoint: main
  volumes:
  - name: run-test
    emptyDir: {}
  - name: workdir
    persistentVolumeClaim:
      claimName: pvc-nas
  - name: docker-config
    secret:
      secretName: docker-config
  arguments:
    parameters:
    - name: repo_url
      value: ""
    - name: repo_name
      value: ""
    - name: target_branch
      value: "main"
  templates:
    - name: main
      dag:
        tasks:
          - name: git-clone
            arguments:
              artifacts:
              - name: git-repo
                path: /workdir
                git:
                  repo: "{{arguments.parameters.repo_url}}"
                  revision: main
                  sshPrivateKeySecret:
                    name: git-creds
                    key: ssh-private-key
            inline:
              container:
                image: golang:1.10
                command:
                - sh
                - -c
                - |
                  cd {{workflow.parameters.repo_name}}
                  git status && ls
                workingDir: /workdir
                volumeMounts:
                - name: "workdir"
                  mountPath: /workdir
          - name: git-checkout-pr
            inline:
              container:
                image: alpine:latest
                command:
                  - sh
                  - -c
                  - |
                    set -eu

                    apk --update add git

                    cd /workdir/{{workflow.parameters.repo_name}}

                    echo "Start to Checkout target branch" {{workflow.parameters.target_branch}}
                    git fetch origin
                    git checkout {{workflow.parameters.target_branch}}

                    echo "Get commit id"
                    git rev-parse --short HEAD > /workdir/{{workflow.parameters.repo_name}}-commitid.txt
                    commitId=$(cat /workdir/{{workflow.parameters.repo_name}}-commitid.txt)
                    echo "Commit id is got: "$commitId

                    echo "Git Checkout Complete."
                volumeMounts:
                - name: "workdir"
                  mountPath: /workdir
                resources:
                  requests:
                    memory: 1Gi
                    cpu: 1
                activeDeadlineSeconds: 1200
            depends: git-clone

ワークフローの送信

repo_url を SSH 形式で設定してください。例: git@github.com:ivan-cai/gitops-demo-private.git
image

環境変数の認証情報によるクローン

個別の git-clone DAG タスクは不要です。git-checkout-pr タスクは、環境変数から認証情報を埋め込みます:

git clone https://$GIT_USER:$GIT_TOKEN@{{workflow.parameters.repo_url}}

このタスクは、2 つの環境変数を使用して git-creds Secret から認証情報を読み取ります:

環境変数 Secret フィールド
GIT_USER username
GIT_TOKEN password

ワークフローテンプレートの適用

次の ClusterWorkflowTemplate をワークフロークラスターに適用してください:

apiVersion: argoproj.io/v1alpha1
kind: ClusterWorkflowTemplate
metadata:
  name: ci-git
spec:
  entrypoint: main
  volumes:
  - name: run-test
    emptyDir: {}
  - name: workdir
    persistentVolumeClaim:
      claimName: pvc-nas
  - name: docker-config
    secret:
      secretName: docker-config
  arguments:
    parameters:
    - name: repo_url
      value: ""
    - name: repo_name
      value: ""
    - name: target_branch
      value: "main"
  templates:
    - name: main
      dag:
        tasks:
          - name: git-checkout-pr
            inline:
              container:
                image: alpine:latest
                env:
                - name: GIT_USER
                  valueFrom:
                    secretKeyRef:
                      name: git-creds
                      key: username
                - name: GIT_TOKEN
                  valueFrom:
                    secretKeyRef:
                      name: git-creds
                      key: password
                command:
                  - sh
                  - -c
                  - |
                    set -eu

                    apk --update add git

                    cd /workdir
                    echo "Start to Clone "{{workflow.parameters.repo_url}}
                    git -C "{{workflow.parameters.repo_name}}" pull || git clone https://$GIT_USER:$GIT_TOKEN@{{workflow.parameters.repo_url}}
                    cd {{workflow.parameters.repo_name}}

                    echo "Start to Checkout target branch" {{workflow.parameters.target_branch}}
                    git checkout {{workflow.parameters.target_branch}}

                    echo "Get commit id"
                    git rev-parse --short origin/{{workflow.parameters.target_branch}} > /workdir/{{workflow.parameters.repo_name}}-commitid.txt
                    commitId=$(cat /workdir/{{workflow.parameters.repo_name}}-commitid.txt)
                    echo "Commit id is got: "$commitId

                    echo "Git Clone and Checkout Complete."
                volumeMounts:
                - name: "workdir"
                  mountPath: /workdir
                resources:
                  requests:
                    memory: 1Gi
                    cpu: 1
                activeDeadlineSeconds: 1200

ワークフローの送信

repo_url には、リポジトリの生の URL を指定してください。https:// プレフィックスは省略してください。テンプレートによって先頭に追加されます。
image

次のステップ