Partilhar via


Executar comandos Git em scripts de pipeline

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

Os comandos do Git estão disponíveis para criar fluxos de trabalho em agentes hospedados pela Microsoft e auto-hospedados. Por exemplo, depois que uma compilação de integração contínua (CI) for concluída em uma ramificação de recurso, você poderá mesclar a ramificação para a principal. Este artigo explica como executar comandos Git em scripts de construção do Azure Pipelines.

Habilitar scripts para executar comandos Git

Verifique se o GitHub usa a identidade padrão da sua conta do Azure DevOps. Se necessário, defina o usuário do GitHub 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 Configurações do projeto para 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.

    Sreenshot que mostra a seleção de 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 <o nome> do projeto Serviço de compilação (<organização>) em Usuários, não Contas de serviço de compilação de coleção de projetos. Por padrão, essa identidade pode ler a partir do repositório, mas não pode enviar por push nenhuma alteração para ele.

  4. Faça uma lista suspensa e selecione Permitir ao lado de cada permissão necessária para os comandos do Git que você deseja executar, normalmente Criar ramificação, 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 acessem o token OAuth do GitHub:

Adicione uma checkout etapa 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 hospedados pela Microsoft, porque eles 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 de linha de comando e uma tarefa de script em lote.

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 Habilitar 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 demerge.bat .

FAQ

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

Sim, você pode executar comandos Git se seu repositório remoto estiver no GitHub ou em outro serviço Git, como o Bitbucket Cloud.

Quais tarefas posso usar para executar comandos do Git?

Você pode usar as seguintes tarefas do Azure Pipelines para executar comandos Git:

Como posso evitar acionar uma compilação de CI quando o script é enviado?

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]"

Você também pode usar qualquer uma das seguintes variações para confirmações 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.

Por que não vejo alguns desses recursos no meu Azure DevOps Server local?

Alguns desses recursos estão disponíveis somente nos Serviços de DevOps do Azure e não estão disponíveis para o Servidor de DevOps do Azure local. Alguns recursos estão disponíveis somente na versão mais recente do Azure DevOps Server.