Clone repositórios Git privados em pipelines de CI do ACK One usando artefatos Git ou variáveis de ambiente.
Três métodos estão disponíveis.
Pré-requisitos
Verifique se você possui:
Um pipeline de CI do Argo Workflows para Golang configurado em um cluster de fluxo de trabalho do ACK One.
Credenciais para o repositório Git privado: nome de usuário e senha (ou token), ou uma chave SSH.
Escolha um método
|
Método |
Autenticação |
Quando usar |
|
Nome de usuário + senha ou token |
Repositórios HTTPS; credenciais já gerenciadas como tokens |
|
|
Chave privada SSH |
URLs de repositório no formato SSH; preferência por autenticação baseada em chave |
|
|
Nome de usuário + senha ou token via variáveis de ambiente |
Configuração mais simples sem tarefa DAG; fluxos de trabalho de tarefa única |
Todos os métodos exigem um Secret do Kubernetes chamado git-creds para as credenciais do repositório. Crie o Secret primeiro e depois aplique o modelo escolhido.
Armazenar credenciais no cluster de fluxo de trabalho
Crie um Secret chamado git-creds no seu cluster de fluxo de trabalho para armazenar o nome de usuário, a senha (ou token) e a chave SSH do repositório.
Substitua os espaços reservados pelos seus valores reais:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
Seu nome de usuário do repositório Git |
|
|
|
Sua senha ou token de acesso pessoal. O GitHub e provedores similares exigem tokens em vez de senhas. |
|
|
|
Caminho local para o arquivo da sua chave privada SSH |
|
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}
# Example:
# 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
Para autenticação SSH, gere um par de chaves e adicione a chave pública ao seu repositório Git antes. Consulte a documentação do seu provedor Git: GitHub | GitLab .
Clonar com artefatos Git (nome de usuário e senha)
O modelo adiciona uma tarefa git-clone que lê username e password do Secret git-creds, como dependência de git-checkout-pr.
Todos os métodos mantêm apenas a tarefa git-checkout-pr do modelo de fluxo de trabalho predefinido. O script shell no parâmetro command de git-checkout-pr permanece inalterado.
Aplicar o modelo de fluxo de trabalho
Aplique o seguinte ClusterWorkflowTemplate ao seu cluster de fluxo de trabalho:
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
Envie o fluxo de trabalho
Defina os parâmetros do fluxo de trabalho para corresponder à configuração do seu pipeline de CI e envie o fluxo de trabalho.

Clonar com artefatos Git (chave SSH)
Semelhante ao método anterior, com duas diferenças:
A tarefa
git-clonelê apenasssh-private-keydo Secretgit-creds.O parâmetro
repo_urldeve estar no formato SSH. Exemplo:git@github.com:ivan-cai/gitops-demo-private.git.
Aplicar o modelo de fluxo de trabalho
Aplique o seguinte ClusterWorkflowTemplate ao seu cluster de fluxo de trabalho:
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
Envie o fluxo de trabalho
Definarepo_urlno formato SSH. Exemplo:git@github.com:ivan-cai/gitops-demo-private.git.

Clonar com credenciais via variável de ambiente
Não é necessária uma tarefa DAG git-clone separada. A tarefa git-checkout-pr incorpora as credenciais das variáveis de ambiente:
git clone https://${GIT_USER}:${GIT_TOKEN}@github.com/${GITHUB_REPOSITORY}
A tarefa lê as credenciais do Secret git-creds usando duas variáveis de ambiente:
|
Variável de ambiente |
Campo do Secret |
|
|
|
|
|
|
Aplicar o modelo de fluxo de trabalho
Aplique o seguinte ClusterWorkflowTemplate ao seu cluster de fluxo de trabalho:
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
Envie o fluxo de trabalho
Forneça a URL bruta do repositório pararepo_url. Omita o prefixohttps://— o modelo o adiciona automaticamente.
