0
votes

Nom de variable dynamique dans le pipeline VSTS (Azure DevOps)

J'ai une variable de pipeline appelée TestVariable .

Je peux facilement accéder à cette variable à partir d'un script PS comme ceci:

$varname="TestVariable"

write-host $($varname)
write-host $("$varname")
write-host $"($varname)"
write-host $("($varname)")

Mais si le nom de cette variable était dynamique, y a-t-il un moyen d'accéder à la valeur de la variable depuis PS?

Par exemple, le nom de la variable entrerait dans une variable chaîne. J'ai essayé ces combinaisons comme expériences ... elles renvoient simplement le nom de la variable, pas la valeur (sans surprise):

write-host $(TestVariable)

Je pense que la réponse est non, mais je veux être sûr. Toute aide très appréciée!

Note éditée

Les deux réponses répondent à la question mais ne résolvent pas mon problème. Après avoir essayé les solutions, j'ai réalisé que j'avais raté une complication supplémentaire que les réponses n'aident malheureusement pas. Je note ici au cas où quelqu'un essaie de faire quelque chose de similaire.

La complication supplémentaire est que la valeur de la variable est définie lors de la publication (j'essaie d'accéder aux variables de sortie du modèle ARM).

Je pensais pouvoir accéder à l'API et obtenir la valeur de la variable `` live '', mais malheureusement, les données de publication n'existent pas (à partir de l'API) tant que la publication n'est pas terminée.

Donc, quand j'appelle ça lors d'une sortie:

https://vsrm.dev.azure.com/ {entreprise} / {projet} / _ apis / release / releases / $ ($ releaseId)? api-version = 5.0

J'obtiens "La version avec l'ID 38 n'existe pas".


3 commentaires

Et le problème? La réponse ci-dessous a-t-elle résolu votre question? Si oui, vous pouvez l'accepter comme réponse, afin qu'elle puisse aider d'autres membres de la communauté qui rencontrent les mêmes problèmes et nous pourrions archiver ce fil, merci. Dans le cas contraire, veuillez nous indiquer si vous souhaitez obtenir de l'aide.


semble prometteur, aura le temps de le tester demain. Merci!


Les deux réponses méritent d'être cochées car elles fonctionnent toutes les deux, c'est juste une préférence pour la méthode à utiliser.


3 Réponses :


1
votes

Ce n'est pas possible directement dans YAML mais vous pouvez utiliser par exemple az cli. Avec cela, vous pouvez définir par programme un nom de variable et obtenir sa valeur

$variableName = "some"

az pipelines variable list --org "https://dev.azure.com/thecodemanual" --project "DevOps Manual" --pipeline-name "DevOps Manual-CI" --query ($variableName + '.value')

$variableName = "test"

az pipelines variable list --org "https://dev.azure.com/thecodemanual" --project "DevOps Manual" --pipeline-name "DevOps Manual-CI" --query ($variableName + '.value')

Vous pouvez maintenant utiliser ce code dans une tâche PowerShell pour récupérer la valeur de la variable.

Ici vous avez des informations sur l'installation de l'extension.


0 commentaires

2
votes

Nom de variable dynamique dans le pipeline VSTS (Azure DevOps)

D'accord avec Krzysztof Madej. Il n'y a pas de moyen prêt à l'emploi pour y parvenir.

Cela parce que les variables imbriquées (comme $($varname) ne sont pas encore prises en charge dans les pipelines de construction.

Pour résoudre ce problème, vous pouvez utiliser les définitions - Obtenir pour obtenir la valeur de la variable dynamique:

$varname="TestVariable"

$url = "https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/<definitionsId>?api-version=5.0"

Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}


$VFDV= $pipeline.variables.$varname.value


Write-Host This is Value For Dynamic Variable: $VFDV

Voici mon script de test PowerShell:

GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.1

entrez la description de l'image ici

Le résultat:

entrez la description de l'image ici

J'espère que cela t'aides.


0 commentaires

0
votes

En retard à la fête, mais je pense que je partagerais.

Comme mentionné dans la documentation Variables définies , les variables de pipeline sont accessibles via les variables d'environnement. Alors que $ (varname) est traité avant le début de la tâche, $ env: varname peut être appelé à mi-exécution. Vous pouvez donc tricher en utilisant:

Write-Host ("$env:TestVariable" | Invoke-Expression)

La tâche résoudra $ (varname) en sa valeur avant le début de la tâche. Ainsi, le script se lit comme suit

Write-Host ('$env:'+"$(varname)" | Invoke-Expression")

Et ça va cracher la même chose que d'appeler $ (TestVariable).

Cependant, vous devez respecter les règles, telles que "" et "". -> "_".


0 commentaires