Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure DevOps Services | Azure Servidor DevOps | Azure DevOps Server 2022
Pipelines geralmente dependem de vários repositórios que contêm código-fonte, ferramentas, scripts ou outros itens necessários para criar seu código. Usando várias etapas checkout em seu pipeline, você pode buscar e fazer check-out de outros repositórios além daquele que você usa para armazenar seu pipeline YAML.
Especificar vários repositórios
Os repositórios podem ser especificados como um recurso repositório ou embutido com a etapa checkout.
Há suporte para os tipos de repositório a seguir.
Azure Repos Git (git)
- Azure DevOps Server (limitado a repositórios na mesma organização)
- Azure DevOps Services
GitHub (github)
- Azure DevOps Services
GitHubEnterprise (githubenterprise)
- Azure DevOps Services
Nuvem do Bitbucket (bitbucket)
- Azure DevOps Services
Importante
Somente repositórios Azure Repos Git (git) na mesma organização que o pipeline têm suporte para check-out de vários repositórios no Servidor de DevOps Azure.
Observação
Azure Pipelines fornece configurações de escopo de trabalho Limit para repositórios Git Azure Repos. Para fazer check-out Azure Repos repositórios Git hospedados em outro project, O escopo do trabalhoLimit deve ser configurado para permitir access. Para obter mais informações, consulte O escopo de autorização de trabalholimit.
Há suporte para as combinações de etapas checkout a seguir.
Nenhuma etapa checkout
O comportamento padrão é como se checkout: self fosse a primeira etapa e o check-out foi feito no repositório atual.
Uma etapa checkout: none única
Nenhum repositório foi sincronizado ou o check-out foi feito.
Uma etapa checkout: self única
O check-out foi feito no repositório atual.
Uma única etapa checkout que não é self ou none
O check-out é feito no repositório designado em vez de self.
Várias etapas checkout
O check-out é feito em cada repositório designado para uma pasta com o nome do repositório, a menos que um path diferente seja especificado na etapa checkout. Para marcar self como um dos repositórios, use checkout: self como uma das etapas checkout.
Observação
Ao fazer check-out Azure Repos repositórios Git diferentes daquele que contém o pipeline, talvez você seja solicitado a autorizar access para esse recurso antes que o pipeline seja executado pela primeira vez. Para obter mais informações, consulte Por que sou solicitado a autorizar recursos na primeira vez que tento fazer check-out de um repositório diferente? na seção de perguntas frequentes.
Definição de recurso do repositório
Você deve usar um recurso repositório se o tipo de repositório exigir uma conexão de serviço ou outro campo de recursos estendidos. Os seguintes tipos de repositório exigem uma conexão de serviço.
| Tipo do repositório | Conexão de serviço |
|---|---|
| Nuvem do Bitbucket | BitBucket Cloud |
| GitHub | GitHub |
| GitHub Enterprise Server | GitHub Enterprise Server |
| Azure Repos repositórios Git em uma organização diferente do pipeline | Azure Repos/Team Foundation Server |
Você pode usar um recurso de repositório mesmo que seu tipo de repositório não exija uma conexão de serviço, por exemplo, se você tiver um recurso de repositório definido para modelos em um repositório diferente.
No exemplo a seguir, três repositórios são declarados como recursos do repositório. O repositório Git Azure Repos em outra organizaçãoGitHub e Bitbucket Cloud recursos de repositório exigem conexões service, especificadas como endpoint para esses recursos de repositório. Este exemplo tem quatro etapas checkout, que verifica os três repositórios declarados como recursos de repositório junto com o repositório self atual que contém o YAML do pipeline.
resources:
repositories:
- repository: MyGitHubRepo # The name used to reference this repository in the checkout step
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
- repository: MyBitbucketRepo
type: bitbucket
endpoint: MyBitbucketServiceConnection
name: MyBitbucketOrgOrUser/MyBitbucketRepo
- repository: MyAzureReposGitRepository # In a different organization
endpoint: MyAzureReposGitServiceConnection
type: git
name: OtherProject/MyAzureReposGitRepo
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
- checkout: MyGitHubRepo
- checkout: MyBitbucketRepo
- checkout: MyAzureReposGitRepository
- script: dir $(Build.SourcesDirectory)
Se o repositório self for chamado de CurrentRepo, o comando script produzirá a seguinte saída: CurrentRepo MyAzureReposGitRepo MyBitbucketRepo MyGitHubRepo. Neste exemplo, os nomes dos repositórios (conforme especificado pela propriedade name no recurso de repositório) são usados para as pastas porque nenhum path é especificado na etapa de verificação. Para obter mais informações sobre os nomes e locais das pastas do repositório, confira a seção Caminho do check-out a seguir.
Check-out de sintaxe embutida
Se o repositório não exigir uma conexão de serviço, você poderá declará-lo embutido com a etapa checkout.
Observação
Somente Azure Repos repositórios Git na mesma organização podem usar a sintaxe embutida. Azure Repos repositórios Git em uma organização diferente e outros tipos de repositório com suporte exigem uma conexão service e devem ser declarados como um recurso repositório.
steps:
- checkout: self
- checkout: git://MyProject/MyRepo # Azure Repos Git repository in the same organization
Observação
No exemplo anterior, o repositório de check-out self é especificado para fazer check-out da origem do repositório associado ao pipeline.
Se você estiver usando o repositório Git Azure Repos padrão (que tem o mesmo nome que o project), use o formato - checkout: git://MyProject/MyRepo.
Caminho do check-out
A menos que um path seja especificado na etapa checkout, o código-fonte é colocado em um diretório padrão. Esse diretório é diferente dependendo se você está fazendo check-out de um ou vários repositórios.
Repositório único: se você tiver uma única etapa
checkoutem seu trabalho ou não tiver nenhuma etapa de check-out equivalente acheckout: self, o check-out será feito no código-fonte em um diretório chamadoslocalizado como uma subpasta de$(Agent.BuildDirectory). Se$(Agent.BuildDirectory)forC:\agent\_work\1, o check-out será feito no código paraC:\agent\_work\1\s.Vários repositórios: se você tiver várias etapas
checkoutem seu trabalho, o check-out será feito no código-fonte em diretórios nomeados com base nos repositórios como uma subpasta dosem$(Agent.BuildDirectory). Se$(Agent.BuildDirectory)forC:\agent\_work\1e seus repositórios forem nomeadostoolsecode, o check-out será feito no código emC:\agent\_work\1\s\toolseC:\agent\_work\1\s\code.Observação
Se nenhum
pathfor especificado na etapacheckout, o nome do repositório será usado para a pasta, não o valorrepositoryusado para fazer referência ao repositório na etapacheckout.
Se um path for especificado para uma etapa checkout, esse caminho será usado em relação a $(Agent.BuildDirectory).
Observação
Se você estiver usando caminhos padrão, a adição de uma segunda etapa checkout de repositório alterará o caminho padrão do código para o primeiro repositório. Por exemplo, o check-out de um código de um repositório chamado tools será feito em C:\agent\_work\1\s quando tools for o único repositório, mas se um segundo repositório for adicionado, o check-out de tools será feito em C:\agent\_work\1\s\tools. Se você tiver alguma etapa que dependa do código-fonte estar no local original, essas etapas deverão ser atualizadas.
Repositório de workspace
Quando várias etapas de checkout (e caminhos diferentes para cada) são usadas em seu pipeline, talvez você queira usar o diretório raiz de um dos repositórios como o diretório de trabalho padrão. Nesse caso, você pode definir a entrada workspaceRepo como true para a etapa de checkout relacionada.
- checkout: git://project/first
path: repo/first-repo
- checkout: git://project/second
path: repo/second-repo
workspaceRepo: true
- pwsh: pwd
# Expected output: $(Pipeline.Workspace)/repo/second-repo
Como fazer check-out de uma referência específica
O branch padrão é verificado, a menos que você escolha uma ref. específica.
Se você estiver usando a sintaxe embutida, designe a referência acrescentando @<ref>. Por exemplo:
- checkout: git://MyProject/MyRepo@features/tools # checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/heads/features/tools # also checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/tags/MyTag # checks out the commit referenced by MyTag.
Importante
O checkout valor, incluindo a parte embutida @<ref> , é resolvido em tempo de compilação como uma referência de recurso.
As variáveis de sintaxe de macro ($(var)) não são expandidas no checkout valor. Por exemplo, checkout: git://MyProject/MyRepo@$(branch) não resolve a variável – o pipeline tenta fazer check-out de um ref literalmente nomeado $(branch), que normalmente falha com um erro "ref não encontrado".
Para parametrizar o branch, use expressões de modelo (${{ }}) com parâmetros de runtime, conforme mostrado nos exemplos a seguir.
${{ variables.myVar }} funciona apenas para variáveis definidas como valores literais no YAML (conhecidos no tempo de compilação), não para variáveis de tempo de fila ou dinamicamente definidas.
Parametrizar ramificação com sintaxe embutida
Defina um parâmetro de runtime e faça referência a ele com uma expressão de modelo no valor de check-out embutido:
parameters:
- name: branch
type: string
default: 'main'
steps:
- checkout: git://MyProject/MyRepo@${{ parameters.branch }}
Parametrizar branch com um recurso de repositório
Use a ref propriedade em um recurso de repositório para definir o branch de um parâmetro:
parameters:
- name: branch
type: string
default: 'main'
resources:
repositories:
- repository: MyRepo
type: git
name: MyProject/MyRepo
ref: ${{ parameters.branch }}
steps:
- checkout: MyRepo
Ao usar um recurso de repositório, especifique a referência usando a propriedade ref. O exemplo a seguir faz check-out do branch features/tools/ do repositório designado.
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: features/tools
steps:
- checkout: MyGitHubRepo
O exemplo a seguir usa tags para verificar a confirmação referenciada por MyTag.
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: refs/tags/MyTag
steps:
- checkout: MyGitHubRepo
Gatilhos
Você pode disparar um pipeline quando uma atualização é enviada por push para o repositório self ou para qualquer repositório declarado como recurso. Isso é útil, por exemplo, nos seguintes cenários:
- Você consome uma ferramenta ou uma biblioteca de um repositório diferente. Você deseja executar testes para seu aplicativo sempre que a ferramenta ou biblioteca for atualizada.
- Você mantém o arquivo YAML em um repositório separado do código do aplicativo. Você deseja disparar o pipeline sempre que uma atualização é enviada por push para o repositório de aplicativos.
Importante
Os gatilhos de recurso de repositório só funcionam para Azure Repos repositórios Git na mesma organização e quando o tipo de repositório self é Azure Repos Git. Eles não funcionam para recursos de repositório GitHub ou bitbucket.
batch não há suporte nos gatilhos de recursos do repositório.
Se você não especificar uma seção trigger em um recurso de repositório, o pipeline não será disparado por alterações nesse repositório. Se você especificar uma seção trigger, o comportamento para disparar será semelhante a como os gatilhos de CI funcionam para o repositório self.
Se você especificar uma seção trigger para vários recursos do repositório, uma alteração em qualquer um deles iniciará uma nova execução.
Quando um pipeline é disparado, Azure Pipelines precisa determinar a versão do arquivo YAML que deve ser usada e uma versão para cada repositório que deve ser verificado. Se uma alteração no repositório self disparar um pipeline, a confirmação que disparou o pipeline será usada para determinar a versão do arquivo YAML. Se uma alteração em qualquer outro recurso de repositório disparar o pipeline, a versão mais recente do YAML do branch padrão do repositório self será usada.
Quando uma atualização em um dos repositórios dispara um pipeline, as seguintes variáveis são definidas com base no gatilho do repositório:
Build.Repository.IDBuild.Repository.NameBuild.Repository.ProviderBuild.Repository.UriBuild.SourceBranchBuild.SourceBranchNameBuild.SourceVersionBuild.SourceVersionMessage
Para o repositório de gatilho, a confirmação que disparou o pipeline determina a versão do código que está com check-out. Para outros repositórios, o ref definido no YAML para esse recurso de repositório determina a versão padrão que está com check-out.
Considere o exemplo a seguir, em que o repositório self contém o arquivo YAML e os repositórios A e B contêm código-fonte adicional.
trigger:
- main
- feature
resources:
repositories:
- repository: A
type: git
name: MyProject/A
ref: main
trigger:
- main
- repository: B
type: git
name: MyProject/B
ref: release
trigger:
- main
- release
steps:
- checkout: self
- checkout: A
- checkout: B
A tabela a seguir mostra quais versões são submetidas a check-out para cada repositório por um pipeline usando o arquivo YAML acima.
| Alteração feita em | Pipeline disparado | Versão do YAML | Versão do self |
Versão do A |
Versão do B |
|---|---|---|---|---|---|
main em self |
Sim | commit de main que disparou o pipeline |
commit de main que disparou o pipeline |
mais recente de main |
mais recente de release |
feature em self |
Sim | commit de feature que disparou o pipeline |
commit de feature que disparou o pipeline |
mais recente de main |
mais recente de release |
main em A |
Sim | mais recente de main |
mais recente de main |
commit de main que disparou o pipeline |
mais recente de release |
main em B |
Sim | mais recente de main |
mais recente de main |
mais recente de main |
commit de main que disparou o pipeline |
release em B |
Sim | mais recente de main |
mais recente de main |
mais recente de main |
commit de release que disparou o pipeline |
Você também pode disparar o pipeline ao criar ou atualizar uma solicitação de pull em qualquer um dos repositórios. To do isso, declare os recursos do repositório nos arquivos YAML como nos exemplos acima e configure uma política de branch no repositório (somente Azure Repos).
Detalhes do repositório
Quando você fizer check-out em vários repositórios, alguns detalhes sobre o repositório self ficam disponíveis como variáveis.
Quando você usa gatilhos de vários repositórios, algumas dessas variáveis têm informações sobre o repositório de gatilho.
Detalhes sobre todos os repositórios consumidos pelo trabalho estão disponíveis como um objeto de contexto de modelo chamado resources.repositories.
Por exemplo, para obter a referência de um repositório não self, você pode gravar um pipeline como este:
resources:
repositories:
- repository: other
type: git
name: MyProject/OtherTools
variables:
tools.ref: $[ resources.repositories['other'].ref ]
steps:
- checkout: self
- checkout: other
- bash: |
echo "Tools version: $TOOLS_REF"
perguntas frequentes
- Por que não consigo fazer check-out de um repositório de outra project? Costumava funcionar.
- Por que sou solicitado a autorizar recursos na primeira vez que tento fazer check-out de um repositório diferente?
Por que não consigo fazer check-out de um repositório de outra project? Costumava funcionar.
Azure Pipelines fornece um escopo de autorização de trabalho Mitir para a configuração atual de project que, quando habilitada, não permite que o pipeline access recursos fora do project que contém o pipeline. Essa configuração pode ser definida no nível da organização ou do project. Se essa configuração estiver habilitada, você não poderá fazer check-out de um repositório em outra project, a menos que conceda explicitamente access. Para obter mais informações, consulte O escopo de autorizaçãojob.
Por que sou solicitado a autorizar recursos na primeira vez que tento fazer check-out de um repositório diferente?
Ao fazer check-out Azure Repos repositórios Git diferentes daquele que contém o pipeline, talvez você seja solicitado a autorizar access para esse recurso antes que o pipeline seja executado pela primeira vez. Esses prompts são exibidos na página de resumo da execução do pipeline.
Escolha Exibir ou Autorizar recursos e siga os prompts para autorizar os recursos.
Para obter mais informações, confira Solução de problemas de autorização para um pipeline YAML.