2
votes

Est-il possible d'utiliser une variable dans la propriété ref de resources: repository for Azure DevOps YAML?

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)$(Build.SourceBranch) devrait se développer en 'refs/heads/feature/mybranch'

Mais ça ne marche pas. Erreur:

master
feature/mybranch


3 commentaires

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.


3 Réponses :


1
votes

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:

entrez la description de l'image ici

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

4 commentaires

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/...



0
votes

L'état d'Azure Docs

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.


0 commentaires

0
votes

Au lieu de référencer le dépôt dans les ressources, utilisez l'extraction en ligne comme décrit ici

https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#checking-out-a-specific-ref

 - 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


0 commentaires