Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Clone a private Git repository in a CI pipeline

Última atualização: Jun 27, 2026

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:

Escolha um método

Método

Autenticação

Quando usar

Clonar com artefatos Git (nome de usuário e senha)

Nome de usuário + senha ou token

Repositórios HTTPS; credenciais já gerenciadas como tokens

Clonar com artefatos Git (chave SSH)

Chave privada SSH

URLs de repositório no formato SSH; preferência por autenticação baseada em chave

Clonar com credenciais via variável de ambiente

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

${username}

Seu nome de usuário do repositório Git

demo

${password or token}

Sua senha ou token de acesso pessoal. O GitHub e provedores similares exigem tokens em vez de senhas.

ghp_GePB****************d407

${ssh private key path}

Caminho local para o arquivo da sua chave privada 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}

# 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.

image

Clonar com artefatos Git (chave SSH)

Semelhante ao método anterior, com duas diferenças:

  • A tarefa git-clone lê apenas ssh-private-key do Secret git-creds.

  • O parâmetro repo_url deve 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

Defina repo_url no formato SSH. Exemplo: git@github.com:ivan-cai/gitops-demo-private.git .

image

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

GIT_USER

username

GIT_TOKEN

password

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 para repo_url . Omita o prefixo https:// — o modelo o adiciona automaticamente.

image

Próximas etapas