Aktualisieren Sie den Wert der Azure-Freigabevariablen in PowerShell

Nov 19 2020

Ich habe die Release-Variable $ (ecomm) = Yes in der Azure Release-Pipeline

Über Powershell möchte ich den Wert von $ (ecomm) = No aktualisieren

Write-Host "Before update: "$(ecomm) Write-Host "##vso[task.setvariable variable=ecomm;]No" Write-Host "After update: "$(ecomm)

Der Wert wird jedoch nicht aktualisiert. Können Sie mir bitte dabei helfen? Danke im Voraus.

Antworten

1 KevinLu-MSFT Nov 20 2020 at 02:01

Repcak ist richtig.

Wenn Sie den Befehl logging verwenden, um Variablen in Powershell festzulegen, können Sie nur den Wert der Variablen in Pipeline Run anstelle der Release-Definition ändern.

Um die Release-Definition in Powershell Task zu aktualisieren, können Sie die folgenden Pipeline-Einstellungen ausprobieren:

Fügen Sie zwei Powershell-Aufgaben hinzu.

1.Die erste PowerShell-Aufgabe führt das folgende Skript aus:

Write-Host "##vso[task.setvariable variable=ecomm;]No"

Dieses Skript wird verwendet, um die Variablenwerte im Pipeline-Lauf zu aktualisieren.

2.Die zweite Powershell-Task führt das folgende Skript aus:

$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/Release/definitions/$($env:RELEASE_DEFINITIONID)?api-version=5.0-preview.3"
Write-Host "URL: $url" $pipeline = Invoke-RestMethod -Uri $url -Headers @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"


$pipeline.variables.ecomm.value = "$(ecomm)"


$json = @($pipeline) | ConvertTo-Json -Depth 99


$updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}

Hinweis: Sie müssen auch einige Release-Optionen festlegen:

  1. Wählen Sie die Option: Allow scripts to access the OAuth tokeninReleases -> Agent Job

  2. Erteilen Sie Edit release pipelineder Rolle die Erlaubnis:Project Collection Build Service (OrgName)

Ergebnis:

Weitere Informationen finden Sie in diesem Ticket .

Repcak Nov 19 2020 at 15:17

Auf diese Weise wird nur die Variable für den angegebenen Pipeline-Lauf aktualisiert. Azure Pipelines importieren diese Variablen von der angezeigten Schnittstelle und können sie dann überschreiben (die Instanz der importierten Variablen). Um die Variable in der klassischen Schnittstelle zu ändern, müssten Sie AzureDevops einen API-Aufruf senden.