All Products
Search
Document Center

Container Service for Kubernetes:Klon repositori Git privat dalam pipeline CI

Last Updated:Jun 17, 2026

Klon repositori Git privat dalam pipeline CI ACK One menggunakan artefak Git atau variabel lingkungan.

Tersedia tiga metode.

Prasyarat

Pastikan Anda telah memiliki:

Pilih metode

Metode Otentikasi Kapan digunakan
Klon dengan artefak Git (username dan password) Username + password atau token Repositori HTTPS; kredensial sudah dikelola sebagai token
Klon dengan artefak Git (kunci SSH) Kunci privat SSH URL repositori dalam format SSH; otentikasi berbasis kunci lebih disukai
Klon dengan kredensial variabel lingkungan Username + password atau token melalui variabel lingkungan Pengaturan lebih sederhana tanpa task DAG; alur kerja satu task

Semua metode memerlukan Kubernetes Secret bernama git-creds untuk menyimpan kredensial repositori. Buat Secret terlebih dahulu, lalu terapkan templat pilihan Anda.

Simpan kredensial di kluster alur kerja

Buat Secret bernama git-creds di kluster alur kerja Anda untuk menyimpan username, password (atau token), dan kunci SSH repositori.

Ganti placeholder dengan nilai aktual Anda:

Placeholder Deskripsi Contoh
${username} Username repositori Git Anda demo
${password or token} Password atau personal access token Anda. Penyedia seperti GitHub mengharuskan penggunaan token, bukan password. ghp_GePB****************d407
${ssh private key path} Path lokal ke file kunci privat SSH Anda $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}

# Contoh:
# 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
Untuk otentikasi SSH, buat pasangan kunci terlebih dahulu dan tambahkan kunci publik ke repositori Git Anda. Lihat dokumentasi penyedia Git Anda: GitHub | GitLab.

Klon dengan artefak Git (username dan password)

Templat ini menambahkan task git-clone yang membaca username dan password dari Secret git-creds, sebagai dependensi dari git-checkout-pr.

Semua metode hanya mempertahankan task git-checkout-pr dari templat alur kerja yang telah ditentukan. Skrip shell dalam parameter command pada git-checkout-pr tetap tidak berubah.

Terapkan templat alur kerja

Terapkan ClusterWorkflowTemplate berikut ke kluster alur kerja Anda:

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
                  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
                    echo "Start to Clone "{{workflow.parameters.repo_url}}
                    git -C "{{workflow.parameters.repo_name}}" pull || git clone {{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
            depends: git-clone

Kirim alur kerja

Atur parameter alur kerja agar sesuai dengan konfigurasi pipeline CI Anda, lalu kirim alur kerja tersebut.

image

Klon dengan artefak Git (kunci SSH)

Metode ini mirip dengan metode sebelumnya, dengan dua perbedaan:

  • Task git-clone hanya membaca ssh-private-key dari Secret git-creds.

  • Parameter repo_url harus dalam format SSH. Contoh: git@github.com:ivan-cai/gitops-demo-private.git.

Terapkan templat alur kerja

Terapkan ClusterWorkflowTemplate berikut ke kluster alur kerja Anda:

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
                    echo "Start to Clone "{{workflow.parameters.repo_url}}
                    git -C "{{workflow.parameters.repo_name}}" pull || git clone {{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
            depends: git-clone

Kirim alur kerja

Atur repo_url dalam format SSH. Contoh: git@github.com:ivan-cai/gitops-demo-private.git.
image

Klon dengan kredensial variabel lingkungan

Tidak diperlukan task DAG git-clone terpisah. Task git-checkout-pr menyematkan kredensial dari variabel lingkungan:

git clone https://${GIT_USER}:${GIT_TOKEN}@github.com/${GITHUB_REPOSITORY}

Task ini membaca kredensial dari Secret git-creds menggunakan dua variabel lingkungan:

Variabel lingkungan Bidang Secret
GIT_USER username
GIT_TOKEN password

Terapkan templat alur kerja

Terapkan ClusterWorkflowTemplate berikut ke kluster alur kerja Anda:

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

Kirim alur kerja

Berikan URL repositori mentah untuk repo_url. Hilangkan awalan https:// — templat akan menambahkannya secara otomatis.
image

Langkah selanjutnya