J'ai deux branches AzureDevOps Git:
62638: "/azure-pipelines.yml: Could not get the latest source version for repository MySolution hosted on Azure Repos using ref refs/heads/$(Build.SourceBranch)."
J'ai un pipeline de construction en plusieurs étapes défini dans yaml, où certaines des étapes sont modélisées dans des fichiers .yml séparés.
Dans mon azure-pipelines.yml externe, je référence un référentiel où mon modèle .yml est actif:
resources: repositories: - repository: templates type: git name: MyProject/MyRepo ref: refs/heads/feature/mybranch
quand je construis dans la branche «master», tout va bien car par défaut le référentiel cherchera dans refs / heads / master.
lorsque je travaille dans la branche de fonctionnalités et que je souhaite tester des modifications expérimentales de mes fichiers .yml de modèle, je ne veux pas qu'il les récupère depuis la branche principale, je veux qu'il utilise les fichiers de la branche sur laquelle je travaille dans.
Ce qui suit fonctionne et me permet de le faire:
resources: repositories: - repository: templates type: git name: MyProject/MyRepo
Cependant, lorsque je fusionne cela avec master, je ne veux évidemment pas que 'ref:' pointe toujours sur la branche de fonctionnalité, donc j'aimerais générer la valeur de 'ref:' dynamiquement avec une variable.
J'ai essayé d'utiliser ref: $(Build.SourceBranch)
où $(Build.SourceBranch)
devrait se développer en 'refs/heads/feature/mybranch'
Mais ça ne marche pas. Erreur:
master feature/mybranch
3 Réponses :
Est-il possible d'utiliser une variable dans la propriété ref de resources: repository for Azure DevOps YAML?
Pour cette question, la réponse est Oui, c'est possible.
À propos de la raison pour laquelle vous recevez ce message d'erreur, la variable (
$(Build.SourceBranch)
) que vous avez utilisée est incorrecte. Vous devez utiliser$(Build.SourceBranchName)
.Comme d'habitude, pour ref, nous devons entrer master ou toute autre branche de fonctionnalité. Tel que
resources: repositories: - repository: templates type: git name: MyApp/MyconApp ref: $(Build.SourceBranchName)Cela peut vous faire penser que c'est la même chose avec la valeur de
$(Build.SourceBranch)
. Ça a la même apparence, je sais, mais différent. En fait, pour le serveur, il lira exactement le nom de la branche et non le chemin de la branche, ce que nous pouvons clairement comprendre avec le type d'éditeur classique:Selon le type d'éditeur classique, nous pouvons savoir ici que nous devons saisir exactement le nom de la branche.
Ainsi, comme les variables prédéfinies sont définies, la valeur de
$(Build.SourceBranch)
est le chemin de la branche, mais pour$(Build.SourceBranchName)
, elle représente exactement un nom de branche.Donc, si vous voulez exécuter avec succès, vous devez utiliser:
$(Build.SourceBranchName)
. Et ça a marché de mon côté.J'espère que cela peut également vous aider à rester à l'écart du message d'erreur.
Éditer:
Le script complet qui fonctionne pour moi est:
ref: refs/heads/master
Merci beaucoup d'avoir examiné cela pour moi. Malheureusement, la solution que vous avez proposée n'a pas fonctionné pour moi: 63049: "/DevOps/DevOps.Pipeline/azure-pipelines.yml: impossible d'obtenir la dernière version source du référentiel MyRepo hébergé sur Azure Repos en utilisant ref refs / heads / $ ( Build.SourceBranchName). "
C'est câblé. À quoi ressemble votre script? Pour moi, le script travaillé est ref: $ (Build.SourceBranchName). Je mets à jour ma réponse, veuillez la vérifier.
@ MerlinLiang-MSFT - Je serais intéressé de savoir si cette approche fonctionne toujours pour vous. J'utilise l'approche que vous avez décrite, mais je rencontre les mêmes erreurs que celles décrites par MarkdotH.
Il semble que cela ne soit pas encore pris en charge, mais est en cours de révision. Developercommunity.visualstudio.com/idea/816606/...
Les variables ne peuvent pas être utilisées pour définir un référentiel dans une instruction YAML.
Cela semble donc limiter ce que vous pouvez faire ici. Il existe peut-être une solution de contournement qui vous permet toujours de faire ce que vous voulez.
Au lieu de référencer le dépôt dans les ressources, utilisez l'extraction en ligne comme décrit ici
- checkout: git://$(System.TeamProject)/$(repoName)@${{ parameters.branchRef }}
Et cet élément yaml permet l'utilisation d'expressions de modèle utilisant des variables, des paramètres par exemple
- checkout: git://$(System.TeamProject)/$(repoName)@${{ variables.branchRef }}
OU
- checkout: git://MyProject/MyRepo@features/tools
Et vous pouvez changer cela dynamiquement
Qu'entendez-vous par la branche «actuelle»? Si vous mettez une compilation en file d'attente, vous pouvez choisir la branche. Si une construction est déclenchée par un déclencheur CI, elle utilisera automatiquement la branche qui a déclenché CI. Il n'y a rien dans YAML que vous devez spécifier pour ce comportement.
Daniel Mann - J'ai mis à jour la question pour clarifier ce que j'essaie d'accomplir
Votre problème est-il résolu maintenant? N'hésitez pas à nous faire part du dernier statut.