Passer des variables au modèle yaml (comme des paramètres) dans Azure Pipelines

Aug 20 2020

Pour minimiser les scripts de construction en double, nous utilisons des modèles dans nos pipelines. Ces modèles ont des paramètres. Cependant, je rencontre maintenant un problème, car je dois transmettre des données à un modèle qui n'est pas encore disponible au démarrage du pipeline. (les données sont générées en certaines étapes pendant le pipeline). Étant donné que les paramètres sont développés au démarrage du pipeline, je ne peux pas transmettre les données au modèle via des paramètres.

Je sais que je peux référencer les variables de sortie de différentes tâches, travaux et étapes dans mon pipeline, mais le modèle que j'utilise n'a aucune connaissance du pipeline environnant dans lequel il est exécuté. Le modèle ne sait donc pas comment référencer les variables de sortie à partir d'autres travaux en dehors du modèle, simplement parce que le modèle ne sait pas quels travaux ont été exécutés auparavant.

Est-il possible de mapper des variables dans mon modèle? Idéalement, j'aimerais faire quelque chose comme ceci:

stages:
- stage: Stage1
  jobs:
  - some job that creates output variables
- stage: Stage2
  jobs:
  - template: 'myTemplate.yaml'
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]

et ayez la variable data1 disponible dans le modèle.

J'essaie donc d'éviter d'avoir à utiliser: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] dans le modèle , car il Stage1pourrait même ne pas exister dans tous les pipelines qui utilisent le modèle.

Je peux réellement le faire, si le modèle ne contient que des étapes, au lieu de plusieurs tâches:

- stage: Stage2
  jobs:
  - job: Job1
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]

    steps:
    - template: templates/Azure/CreateTenant.yaml

Malheureusement, mes modèles contiennent plusieurs tâches

Mise à jour: j'ai entré une demande de fonctionnalité pour mieux prendre en charge cette situation: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html

Réponses

2 LeoLiu-MSFT Aug 21 2020 at 07:48

Je peux réellement le faire, si le modèle ne contient que des étapes, au lieu de plusieurs tâches. Malheureusement, mes modèles contiennent plusieurs tâches

Pour résoudre ce problème, vous pouvez définir les variables au niveau de l'étape au lieu du niveau du travail:

  - stage: Stage2
    variables:
      data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]

    jobs:
      - template: templates/Azure/CreateTenant.yaml

Ensuite, nous pourrions éviter d'avoir à utiliser: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]dans le modèle.

Vous pouvez consulter le document Portées variables pour plus de détails.