web-dev-qa-db-de.com

Legen Sie die VSTS-Ausgabevariable als Ergebnis des Bash-Befehls fest

Ich führe eine Aufgabe in VSTS aus, die einige Vorgänge für eine Variable aus einem vorherigen Schritt ausführt, und muss dann das Ergebnis ausgeben, das in zukünftigen Aufgaben verwendet werden soll. Ich habe Folgendes in einer Befehlszeilenaufgabe, die auf einem Linux-Build-Host ausgeführt wird, habe aber kein Glück, wenn ich versuche, das Ergebnis später mit $ (podName3) zu verwenden.

COMMAND="$(echo '$(pods)' | grep -oh -P '[^ ]*' | grep schema)"
##vso[task.setvariable variable=podName3]"$COMMAND"

Ich habe mehrere Variationen davon ausprobiert und brauche eine Richtung, da mich dies zu lange verkümmert hat

4
David Parsonson

Die Syntax scheint falsch zu sein.

Versuchen Sie einfach das folgende Format zu verwenden:

COMMAND="$(echo '$pods' | grep -oh -P '[^ ]*' | grep schema)"
echo "##vso[task.setvariable variable=podName3]$COMMAND"

Oder fügen Sie eine Powershell-Aufgabe hinzu und führen Sie die folgenden Befehle aus, um die Variable festzulegen:

$COMMAND="$(echo '$env:pods' | grep -oh -P '[^ ]*' | grep schema)"

Write-Host "##vso[task.setvariable variable=podName3]$COMMAND"

Weitere Informationen finden Sie unter Definieren und ändern Sie Ihre Variablen in einem Skript.

9
Andy Li-MSFT

Ich habe dazu ein Befehlszeilentool und eine Azure-DevOps-Aufgabe erstellt: https://marketplace.visualstudio.com/items?itemName=riezebosch.setvar

Sie können nur die Ausgabe eines Befehls in das Werkzeug hineinleiten und als magische Variablenzeichenfolge ausgeben. Es ist in Go und Cross geschrieben und funktioniert daher auf allen wichtigen Plattformen und allen anderen Shells.

Ihr Beispiel:

echo '$pods' | grep -oh -P '[^ ]*' | grep schema | setvar -name podName3

Sie müssen lediglich die Aufgabe setvar vor dieser Skriptaufgabe einschließen, um das Tool auf den Agenten zu übertragen.

0
riezebosch