Executar comandos Git em scripts de pipeline

Azure DevOps Serviços | Azure DevOps Server | Azure DevOps Server 2022

Comandos git estão disponíveis para fluxos de trabalho de compilação em agentes Microsoft-hosted e self-hosted. Por exemplo, depois de uma compilação de integração contínua (CI) ser concluída num ramo de funcionalidades, pode mesclar o ramo no principal. Este artigo explica como executar comandos Git em scripts de compilação do Azure Pipelines.

Habilitar scripts para executar comandos Git

Certifique-se de que o Git usa a identidade padrão da sua conta Azure DevOps. Se necessário, defina o utilizador Git como o primeiro passo após o checkout.

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Conceder permissões ao serviço de compilação

O serviço de compilação do projeto deve ter permissões para gravar no repositório de origem. Defina as permissões necessárias da seguinte forma:

  1. Nas Definições do Projeto para o seu projeto, selecione Repositórios em Repos.

  2. Na página Todos os repositórios , selecione Segurança para definir permissões para todos os repositórios no projeto. Ou, selecione o repositório no qual você deseja executar comandos Git e, em seguida, selecione Segurança na página do repositório.

    Screenshot que mostra como selecionar Segurança para repositórios.

  3. Na página Permissões de usuário , selecione a identidade do Serviço de Compilação . Certifique-se de selecionar <nome do projeto> Build Service (<organização>) em Utilizadores, não Project Collection Build Service Accounts. Por padrão, essa identidade pode ler o repositório, mas não pode fazer push de nenhuma alteração para ele.

  4. Desça a lista suspensa e selecione Permitir ao lado de cada permissão necessária para os comandos do Git que pretendes executar, normalmente Criar ramo, Contribuir, Ler e Criar tag.

    Captura de tela que mostra a concessão das permissões de identidade aos repositórios.

Permitir que scripts acessem o token do sistema

Para permitir que scripts acedam ao token GitHub OAuth:

Adicione um checkout passo ao seu pipeline YAML com persistCredentials definido como true.

steps:
- checkout: self
  persistCredentials: true

Para obter mais informações sobre a checkout etapa, consulte a steps.checkout definição.

Limpe o repositório local

O pipeline de compilação não limpa automaticamente certas alterações no repositório local, como excluir ramificações locais ou desfazer alterações locais git config . Se você tiver problemas usando um agente auto-hospedado, poderá limpar o repositório antes de executar a compilação.

Em geral, para um desempenho mais rápido de agentes auto-hospedados, não limpe o repo. A limpeza não é eficaz para agentes alojados pela Microsoft, porque usam um novo agente a cada vez. Para obter mais informações, consulte Limpar o repositório local no agente.

Para limpar o repositório antes de executar a compilação:

Defina clean como truecheckout na etapa. Esta opção é executada git clean -ffdx seguida por git reset --hard HEAD antes de buscar.

steps:
- checkout: self
  clean: true

Selecione Variáveis no editor de pipeline, crie ou modifique a Build.Clean variável e defina seu valor como source.

Exemplos de comandos do Git

Os exemplos a seguir executam comandos Git em uma tarefa linha de comandos e uma tarefa de script Batch.

Liste os arquivos em seu repositório

Para listar os arquivos no repositório Git, use a tarefa de linha de comando em um pipeline YAML da seguinte maneira:

- task: CmdLine@2
  inputs:
    script: 'git ls-files'

Mesclar um ramo de feature ao ramo principal

O exemplo de pipeline clássico a seguir mescla uma compilação de CI para main se a compilação for bem-sucedida.

  1. Crie um arquivo chamado merge.bat na raiz do repositório com o seguinte conteúdo:

    @echo off
    ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
    IF %BUILD_SOURCEBRANCH% == refs/heads/main (
       ECHO Building main branch so no merge is needed.
       EXIT
    )
    SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
    ECHO GIT CHECKOUT MAIN
    git checkout main
    ECHO GIT STATUS
    git status
    ECHO GIT MERGE
    git merge %sourceBranch% -m "Merge to main"
    ECHO GIT STATUS
    git status
    ECHO GIT PUSH
    git push origin
    ECHO GIT STATUS
    git status
    
  2. Na guia Gatilhos no Pipeline Clássico, marque a caixa de seleção para Ativar a integração contínua.

  3. Em Filtros de ramificação e Filtros de caminho, selecione ramificações e caminhos para Incluir ou Excluir da compilação.

  4. Adicione um script de lote como a última tarefa em seu pipeline.

  5. Em Caminho na configuração da tarefa, insira o local e o nome do arquivo merge.bat.

FAQ

Posso executar comandos Git se o meu repositório remoto estiver no GitHub ou noutro serviço Git como o Bitbucket Cloud?

Sim, podes executar comandos Git se o teu repositório remoto estiver no GitHub ou noutro serviço Git como o Bitbucket Cloud.

Quais tarefas posso usar para executar comandos do Git?

Pode usar as seguintes tarefas do Azure Pipelines para executar comandos Git:

Como posso evitar acionar um build de CI quando o script realiza um 'push'?

Para evitar acionar uma compilação de CI quando o script for enviado, adicione [skip ci] à sua mensagem de confirmação ou descrição. Por exemplo:

  • git commit -m "This is a commit message [skip ci]"
  • git merge origin/features/hello-world -m "Merge to main [skip ci]"

Também pode usar qualquer uma das seguintes variações para commits no Azure Repos Git, Bitbucket Cloud, GitHub ou GitHub Enterprise Server:

  • [skip ci] ou [ci skip]
  • skip-checks: true ou skip-checks:true
  • [skip azurepipelines] ou [azurepipelines skip]
  • [skip azpipelines] ou [azpipelines skip]
  • [skip azp] ou [azp skip]
  • ***NO_CI***

Preciso de um agente para executar pipelines?

Sim, você precisa de pelo menos um agente para executar seu pipeline de compilação ou lançamento.

Como posso solucionar problemas?

Consulte Solucionar problemas de execução de pipeline.

Como posso corrigir a impossibilidade de selecionar um pool de agentes padrão ou enfileirar minha execução de pipeline?

Consulte Criar e gerenciar pools de agentes.

Como posso corrigir minha falha na tarefa de push do NuGet com "Erro: não é possível obter o certificado de emissor local"?

Você pode corrigir esse problema adicionando um certificado raiz confiável. Adicione a NODE_EXTRA_CA_CERTS=file variável de ambiente ao seu agente de compilação ou adicione a NODE.EXTRA.CA.CERTS=file variável de tarefa em seu pipeline.

Para obter mais informações sobre essa variável, consulte NODE_EXTRA_CA_CERTS=file na documentação do Node.js. Para obter instruções sobre como definir uma variável em seu pipeline, consulte Definir variáveis em um pipeline.

Porque é que não vejo algumas destas funcionalidades no meu Azure DevOps Server local?

Algumas destas funcionalidades estão disponíveis apenas nos Serviços Azure DevOps e não estão disponíveis para instalações Azure DevOps Server. Algumas funcionalidades estão disponíveis apenas na versão mais recente do Azure DevOps Server.