Durante a execução de pipelines de build no Azure DevOps, pode ser necessário fazer push de arquvios gerados de volta para o repositório Git. Um erro comum é o seguinte:
remote: 001f# service=git-receive-pack
remote: 0000000000aaTF401027: You need the Git 'GenericContribute' permission to perform this action. Details: identity 'Build\8b517d3f-052b-41e0-a7f6-e811999734c0', scope 'repository'.
remote: TF401027: You need the Git 'GenericContribute' permission to perform this action. Details: identity 'Build\8b517d3f-052b-41e0-a7f6-e811999734c0', scope 'repository'.
fatal: unable to access 'https://dev.azure.com/organizacao/projeto/_git/repositorio/': The requested URL returned error: 403
Esse erro indica que a identidade de serviço do build não possui permissão para contribuir no repositório. A seguir, as etapas para resolver o problema.
Pré‑requisito: configurar identidade local do Git
Antes de qualquer comando Git no pipeline, certifique‑se de definir o usuário e email globais:
git config --global user.email "seuemail@exemplo.com"
git config --global user.name "Seu Nome"
1. Conceder permissões à conta de serviço do build
No Azure DevOps, a identidade Project Collection Build Service (não o grupo) precisa de permissões de escrita no repositório.
- Vá para Organziation Settings > General > Projects e selecione o projeto.
- Em Project Settings, escolha Repositories e depois o repositório desejado.
- Selecione Security.
- Pesquise por Project Collection Build Service ({nome da organização}).
- Conceda as permissões mínimas necessárias, normalmente:
- Create Branch: Allow
- Contribute: Allow
- Read: Allow
- Create Tag: Allow
2. Permitir que o script acesse o token do sistema
No pipeline, ao fazer checkout, é necessário persistir as credenciais para que comandos Git posteriores funcionem.
YAML
steps:
- checkout: self
persistCredentials: true
Para pipelines clássicos, marque a opção Allow scripts to access the OAuth token nas configurações do job.
3. Garantir que o repositório local esteja limpo
O pipeline pode deixar alterações residuais. Para evitar conflitos, configure a limpeza:
YAML
steps:
- checkout: self
clean: true
Em pipelines clássicos, ative a opção Clean na tarefa de checkout.
Essas configurações garantem que a identidade de build tenha permissão e ambiente adequados para executar push de artefatos ou outros comandos Git.