Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Pipelines s’appuient souvent sur plusieurs référentiels qui contiennent du code source, des outils, des scripts ou d’autres éléments dont vous avez besoin pour générer votre code. En utilisant plusieurs étapes checkout dans votre pipeline, vous pouvez récupérer (fetch) et extraire d’autres référentiels, outre celui que vous utilisez pour stocker votre pipeline YAML.
Spécifier plusieurs référentiels
Les référentiels peuvent être spécifiés en tant que ressource repository ou inline avec l’étape checkout.
Sont pris en charge les types de référentiels suivants.
Azure Repos Git (git)
- Azure DevOps Server (limité aux dépôts dans la même organisation)
- Azure DevOps Services
GitHub (github)
- Azure DevOps Services
GitHubEnterprise (githubenterprise)
- Azure DevOps Services
Bitbucket Cloud (bitbucket)
- Azure DevOps Services
Important
Seuls Azure Repos Git (git) dans la même organisation que le pipeline sont pris en charge pour l’extraction de plusieurs référentiels dans Azure DevOps Server.
Notes
Azure Pipelines fournit Limiter l’étendue du travail pour les référentiels Git Azure Repos. Pour extraire Azure Repos référentiels Git hébergés dans un autre project, Limiter l’étendue du travail doit être configuré pour autoriser access. Pour plus d’informations, consultez Limiter l’étendue d’autorisation du travail.
Sont prises en charge les combinaisons suivantes d’étapes checkout.
Aucune étape checkout
Le comportement par défaut est identique au cas de figure où checkout: self constitue la première étape, et le référentiel actuel est extrait.
Une seule étape checkout: none
Aucun référentiel n’est synchronisé ni extrait.
Une seule étape checkout: self
Le référentiel actuel est extrait.
Une seule étape checkout qui n’est pas self ni none
Le référentiel désigné est extrait au lieu de self.
Plusieurs étapes checkout
Chaque référentiel désigné est extrait dans un dossier nommé d’après le référentiel, à moins qu’un autre path ne soit spécifié à l’étape checkout. Pour extraire self comme référentiel, utilisez checkout: self parmi les étapes checkout.
Notes
Lorsque vous consultez Azure Repos référentiels Git autres que celui contenant le pipeline, vous pouvez être invité à autoriser access à cette ressource avant l’exécution du pipeline pour la première fois. Pour plus d’informations, consultez Pourquoi m’est-il demandé d’autoriser des ressources la première fois que j’essaie d’extraire un autre référentiel ? dans la section FAQ.
Définition de ressources de référentiel
Vous devez utiliser une ressource repository si votre type de référentiel nécessite une connexion de service ou un autre champ de ressources étendues. Une connexion de service est nécessaire pour les types de référentiels suivants.
| Type de référentiel | Connexion du service |
|---|---|
| Bitbucket Cloud | Bitbucket Cloud |
| GitHub | GitHub |
| GitHub Enterprise Server | GitHub Enterprise Server |
| Azure Repos référentiels Git dans une organisation différente de celle de votre pipeline | Azure Repos/Team Foundation Server |
Il est possible d’utiliser une ressource de référentiel même si le type de référentiel en question n’implique pas de connexion de service, par exemple si une ressource de référentiel a déjà été définie pour les modèles dans un autre référentiel.
Dans l’exemple suivant, trois référentiels sont déclarés en tant que ressources de référentiel. Dépôt Git Azure Repos dans une autre organisation, GitHub et Bitbucket Cloud les ressources du référentiel nécessitent des connexions service qui sont spécifiées comme endpoint pour ces ressources de référentiel. Cet exemple comporte quatre étapes checkout, ce qui permet d’extraire les trois référentiels déclarés en tant que ressources de référentiel, ainsi que le référentiel self actuel qui contient le YAML de 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)
Si le référentiel self est nommé CurrentRepo, la commande script produit la sortie CurrentRepo MyAzureReposGitRepo MyBitbucketRepo MyGitHubRepo. Dans cet exemple, le nom donné aux dossiers est celui des référentiels (indiqué par la propriété name dans la ressource de référentiel), car aucun path n’est spécifié à l’étape checkout. Pour plus d’informations sur les noms et emplacements des dossiers de référentiel, consultez la section Chemin d’extraction suivante.
Syntaxe checkout inline
Si votre référentiel n’a pas besoin d’une connexion de service, vous pouvez le déclarer inline avec votre étape checkout.
Notes
Seuls Azure Repos référentiels Git dans la même organisation peuvent utiliser la syntaxe inline. Azure Repos référentiels Git dans une autre organisation et d’autres types de référentiels pris en charge nécessitent une connexion service et doivent être déclarés comme une ressource repository.
steps:
- checkout: self
- checkout: git://MyProject/MyRepo # Azure Repos Git repository in the same organization
Notes
Dans l'exemple précédent, le référentiel checkout self est spécifié afin d'extraire la source du référentiel associé au pipeline.
Si vous utilisez le référentiel Git par défaut Azure Repos (qui porte le même nom que le project), utilisez le format - checkout: git://MyProject/MyRepo.
Chemin de l’extraction
À moins qu’un path ne soit spécifié à l’étape checkout, le code source est placé dans un répertoire par défaut. Ce répertoire est différent selon qu’un seul ou plusieurs référentiels sont extraits.
Un seul référentiel : si le travail comporte une seule étape
checkoutou ne comprend pas d’étape checkout équivalente àcheckout: self, le code source est extrait dans un répertoire appelés, qui constitue un sous-dossier de$(Agent.BuildDirectory). Si$(Agent.BuildDirectory)a la valeurC:\agent\_work\1, le code est extrait dansC:\agent\_work\1\s.Plusieurs référentiels : si le travail comporte plusieurs étapes
checkout, le code source est extrait dans les répertoires nommés d’après les référentiels qui constituent un sous-dossier desdans$(Agent.BuildDirectory). Si$(Agent.BuildDirectory)estC:\agent\_work\1et que les référentiels s’appellenttoolsetcode, le code est extrait dansC:\agent\_work\1\s\toolsetC:\agent\_work\1\s\code.Notes
Si aucun
pathn’est spécifié à l’étapecheckout, le nom donné au dossier est celui du référentiel, et non la valeurrepositorypermettant de faire référence au référentiel à l’étapecheckout.
Si un path est spécifié pour une étape checkout, il est utilisé, par rapport à $(Agent.BuildDirectory).
Notes
Lorsque les chemins par défaut sont utilisés, le fait d’ajouter une deuxième étape de référentiel checkout a pour effet de modifier le chemin par défaut du code du premier référentiel. Par exemple, le code d’un référentiel nommé tools est extrait dans C:\agent\_work\1\s quand tools représente le seul référentiel. Cependant, si un deuxième référentiel est ajouté, tools est extrait dans C:\agent\_work\1\s\tools. Toute étape dépendant du code source qui se trouve à l’emplacement d’origine doit être mise à jour.
Référentiel d’espace de travail
Lorsque plusieurs étapes checkout (et différents chemins d’accès pour chacun) sont utilisées dans votre pipeline, vous pouvez utiliser le répertoire racine de l’un des référentiels comme répertoire de travail par défaut. Si c’est le cas, vous pouvez définir l’entrée workspaceRepo sur true pour l’étape de checkout associée.
- 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
Extraction d’une référence spécifique
La branche par défaut est extraite, à moins que vous ne désigniez une référence spécifique.
Si vous utilisez la syntaxe inline, désignez la référence en ajoutant @<ref>. Par exemple :
- 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.
Important
La checkout valeur, y compris la partie incluse @<ref> , se résout au moment de la compilation en tant que référence de ressource.
Les variables de syntaxe de macro ($(var)) ne sont pas développées dans la checkout valeur. Par exemple, checkout: git://MyProject/MyRepo@$(branch) ne résout pas la variable : le pipeline tente d’extraire un ref nommé littéralement $(branch), ce qui échoue généralement avec une erreur « ref introuvable ».
Pour paramétrer la branche, utilisez des expressions de modèle (${{ }}) avec des paramètres d’exécution, comme illustré dans les exemples suivants.
${{ variables.myVar }} fonctionne uniquement pour les variables définies en tant que valeurs littérales dans YAML (connu au moment de la compilation), et non pour les variables de mise en file d’attente ou de définition dynamique.
Paramétrer une branche avec une syntaxe inline
Définissez un paramètre runtime et référencez-le avec une expression de modèle dans la valeur d’extraction inline :
parameters:
- name: branch
type: string
default: 'main'
steps:
- checkout: git://MyProject/MyRepo@${{ parameters.branch }}
Paramétrer une branche avec une ressource de référentiel
Utilisez la ref propriété sur une ressource de référentiel pour définir la branche à partir d’un paramètre :
parameters:
- name: branch
type: string
default: 'main'
resources:
repositories:
- repository: MyRepo
type: git
name: MyProject/MyRepo
ref: ${{ parameters.branch }}
steps:
- checkout: MyRepo
Lorsque vous utilisez une ressource de référentiel, spécifiez la référence à l’aide de la propriété ref. L’exemple suivant extrait la branche features/tools/ du référentiel désigné.
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: features/tools
steps:
- checkout: MyGitHubRepo
L’exemple suivant utilise tags pour extraire la validation référencée par MyTag.
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: refs/tags/MyTag
steps:
- checkout: MyGitHubRepo
Déclencheurs
Il est possible de déclencher un pipeline lorsqu’une mise à jour est envoyée (push) au référentiel self ou à l’un des référentiels déclarés en tant que ressources. Cette solution est utile, par exemple, dans les scénarios suivants :
- Vous consommez un outil ou une bibliothèque à partir d’un autre référentiel. Vous souhaitez exécuter des tests de votre application chaque fois que l’outil ou la bibliothèque est mis à jour.
- Vous conservez votre fichier YAML dans un référentiel distinct du code de l’application. Vous souhaitez déclencher le pipeline chaque fois qu’une mise à jour est envoyée (push) au référentiel de l’application.
Important
Les déclencheurs de ressource de référentiel fonctionnent uniquement pour Azure Repos référentiels Git dans la même organisation et lorsque le type de référentiel self est Azure Repos Git. Ils ne fonctionnent pas pour les ressources de dépôt GitHub ou Bitbucket.
batch n’est pas pris en charge dans les déclencheurs de ressources de référentiel.
Si vous ne spécifiez pas de section trigger dans une ressource de référentiel, le pipeline n’est pas déclenché par les modifications apportées à ce référentiel. Dans le cas inverse où une section trigger est définie, le comportement observé est similaire au fonctionnement des déclencheurs CI pour le référentiel self.
Si vous spécifiez une section trigger pour plusieurs ressources de référentiel, toute modification apportée à l’une d’elles déclenche une nouvelle exécution.
Lorsqu’un pipeline est déclenché, Azure Pipelines doit déterminer la version du fichier YAML qui doit être utilisée et une version pour chaque référentiel à extraire. Si une modification apportée au référentiel self déclenche un pipeline, la validation qui a déclenché le pipeline est utilisée pour déterminer la version du fichier YAML. Dans le cas où le pipeline est déclenché par une modification apportée à une autre ressource de référentiel, c’est la dernière version de YAML dans la branche par défaut du référentiel self qui est retenue.
Lorsqu’une mise à jour de l’un des référentiels déclenche un pipeline, les variables suivantes sont définies en fonction du référentiel en question :
Build.Repository.IDBuild.Repository.NameBuild.Repository.ProviderBuild.Repository.UriBuild.SourceBranchBuild.SourceBranchNameBuild.SourceVersionBuild.SourceVersionMessage
Pour le référentiel déclencheur, le commit qui a déclenché le pipeline détermine la version du code extrait. En ce qui concerne les autres référentiels, la version par défaut extraite dépend du ref défini dans YAML pour la ressource de référentiel.
Prenons l’exemple suivant, où le référentiel self contient le fichier YAML, et les référentiels A et B du code source supplémentaire.
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
Le tableau suivant montre quelles versions sont extraites pour chaque référentiel par un pipeline utilisant le fichier YAML ci-dessus.
| Élément modifié | Pipeline déclenché | Version de YAML | Version de self |
Version de A |
Version de B |
|---|---|---|---|---|---|
main dans self |
Oui | Commit à partir de main qui a déclenché le pipeline |
Commit à partir de main qui a déclenché le pipeline |
La dernière à partir de main |
La dernière à partir de release |
feature dans self |
Oui | Commit à partir de feature qui a déclenché le pipeline |
Commit à partir de feature qui a déclenché le pipeline |
La dernière à partir de main |
La dernière à partir de release |
main dans A |
Oui | La dernière à partir de main |
La dernière à partir de main |
Commit à partir de main qui a déclenché le pipeline |
La dernière à partir de release |
main dans B |
Oui | La dernière à partir de main |
La dernière à partir de main |
La dernière à partir de main |
Commit à partir de main qui a déclenché le pipeline |
release dans B |
Oui | La dernière à partir de main |
La dernière à partir de main |
La dernière à partir de main |
Commit à partir de release qui a déclenché le pipeline |
Vous pouvez également déclencher le pipeline lorsque vous créez ou mettez à jour une demande de tirage (pull request) dans l’un des référentiels. To do cela, déclarez les ressources du référentiel dans les fichiers YAML comme dans les exemples ci-dessus et configurez une stratégie de branche dans le référentiel (Azure Repos uniquement).
Détails du référentiel
Lorsque plusieurs référentiels sont extraits, certaines données sur le référentiel self sont disponibles sous forme de variables.
Si vous utilisez des déclencheurs multiréférentiels, certaines de ces variables comportent au contraire des informations sur le référentiel déclencheur.
Le détail de tous les référentiels consommés par le travail est disponible sous la forme d’un objet de contexte de modèle appelé resources.repositories.
Par exemple, pour obtenir la référence d’un référentiel autre que self, il est possible d’écrire un pipeline comme suit :
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"
Questions fréquentes (FAQ)
- Pourquoi ne puis-je pas extraire un référentiel d'un autre project ? Cela fonctionnait auparavant.
- Pourquoi m’est-il demandé d’autoriser des ressources la première fois que j’essaie d’extraire un autre référentiel ?
Pourquoi ne puis-je pas extraire un référentiel d'un autre project ? Cela fonctionnait auparavant.
Azure Pipelines fournit une étendue d'autorisation de travail Limiter le paramètre actuel project, qui, lorsqu'il est activé, n'autorise pas le pipeline à access ressources en dehors du project qui contient le pipeline. Ce paramètre peut être défini au niveau de l’organisation ou du project. Si ce paramètre est activé, vous ne pourrez pas extraire un référentiel dans une autre project, sauf si vous accordez explicitement access. Pour plus d’informations, consultez 'étendue d’autorisationJob.
Pourquoi m’est-il demandé d’autoriser des ressources la première fois que j’essaie d’extraire un autre référentiel ?
Lorsque vous consultez Azure Repos référentiels Git autres que celui contenant le pipeline, vous pouvez être invité à autoriser access à cette ressource avant l’exécution du pipeline pour la première fois. Ces invites s’affichent sur la page récapitulative de l’exécution du pipeline.
Choisissez Afficher ou Autoriser des ressources, puis suivez les invites pour autoriser les ressources.
Pour plus d’informations, consultez Résolution des problèmes d’autorisation d’un pipeline YAML.