Klon repositori Git privat dalam pipeline CI ACK One menggunakan artefak Git atau variabel lingkungan.
Tersedia tiga metode.
Prasyarat
Pastikan Anda telah memiliki:
-
Pipeline CI Argo Workflows untuk Golang yang dikonfigurasi dalam kluster alur kerja ACK One.
-
Kredensial untuk repositori Git privat: username dan password (atau token), atau kunci SSH.
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.
Klon dengan artefak Git (kunci SSH)
Metode ini mirip dengan metode sebelumnya, dengan dua perbedaan:
-
Task
git-clonehanya membacassh-private-keydari Secretgit-creds. -
Parameter
repo_urlharus 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
Aturrepo_urldalam format SSH. Contoh:git@github.com:ivan-cai/gitops-demo-private.git.
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 untukrepo_url. Hilangkan awalanhttps://— templat akan menambahkannya secara otomatis.