2 votes

Récupération d'une variable de sortie à partir d'un travail de déploiement

Dans l'exemple suivant, je suis capable d'accéder aux variables de sortie de jobA mais pas de deploymentA . La principale différence étant que jobA est un emploi "normal" et deploymentA est un travail de déploiement.

jobs:
- deployment: deploymentA
  environment: Test
  strategy:
    runOnce:
      deploy:
        steps:
        - checkout: none
        - pwsh: |
            echo "##vso[task.setvariable variable=someVar;isOutput=true]someValue"
          name: someName

- job: jobA
  steps:
  - checkout: none
  - pwsh: |
      echo "##vso[task.setvariable variable=someVarA;isOutput=true]someValueA"
    name: someNameA

- job: jobB
  dependsOn: 
  - deploymentA
  - jobA

  variables:
    deployJobVar: $[dependencies.deploymentA.outputs['someName.someVar']]
    jobVar: $[dependencies.jobA.outputs['someNameA.someVarA']]

  steps:
  - checkout: none
  - pwsh: |
      echo "$(deployJobVar)"    # will display empty string
      echo "$(jobVar)"          # will display 'someValueA'

El meilleur indice que j'ai trouvé est :

Si vous définissez une variable à partir d'une matrice ou d'une tranche, alors pour référencer la variable, vous devez inclure le nom du travail ainsi que l'étape lorsque vous y accédez à partir d'un travail en aval.

Ce n'est pas exactement la même chose, mais j'ai essayé de faire précéder des identifiants similaires, mais aucune des propositions suivantes n'a fonctionné :

$[dependencies.deploymentA.outputs['runOnce.someName.someVar']]
$[dependencies.deploymentA.outputs['deploy.someName.someVar']]
$[dependencies.deploymentA.outputs['runOnce.deploy.someName.someVar']]

Quelqu'un connaît-il la syntaxe correcte pour accéder à des variables spécifiques produites par un travail de déploiement ? Sinon, quelqu'un sait-il comment afficher toutes les variables produites ?

4voto

Victor Savu Points 562

La documentation est actuellement incomplète, mais avec un peu d'imagination, on peut remarquer que la deuxième partie de l'option Définir une variable de sortie multi-tâches s'applique.

il suffit de référencer votre variable avec le nom de la tâche comme préfixe : deploymentA.someName.someVar au lieu de someName.someVar :

deployJobVar: $[dependencies.deploymentA.outputs['deploymentA.someName.someVar']]

Oui, deploymentA apparaît deux fois.

0voto

Merlin Liang Points 13186

La syntaxe correcte pour accéder à des variables spécifiques produites par un fichier de type tâche de déploiement ?

Il est correct que vous avez utilisé la variable de syntaxe. Pour la raison causée, il n'y a pas de valeur affichée dans le prochain travail "normal", en fait vous avez mentionné précédemment, il s'agit d'un travail de déploiement .

Dans votre YAML script, la variable someVar dans le job de déploiement est créé dans le job de libération. Cette variable n'a pas pu être transmise hors de la scène, même si vous avez défini le paramètre isOutput=true .( Note : Ceci ne se produit que dans le pipeline de la version). Il n'existe que dans le job actuel si vous le définissez simplement avec la commande ##vso[task.setvariable] .

Dans le pipeline de libération, les tâches de déploiement sont indépendantes les unes des autres. Cela signifie que si vous définissez une variable dans une tâche (ou une étape), elle ne pourra pas être accessible en dehors de la tâche. Vous pouvez également tester cela avec l'éditeur classique.

Si vous voulez l'utiliser dans l'autre tâche, vous devez la stocker dans un endroit comme Key Vault. Et ensuite l'utiliser dans le travail suivant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X