Zaktualizuj wartość zmiennej wydania platformy Azure w programie PowerShell

Nov 19 2020

Mam Release Variable $ (ecomm) = Yes, w Azure Release Pipeline

Poprzez PowerShell chcę zaktualizować wartość $ (ecomm) = Nie

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

Ale wartość się nie aktualizuje. Czy możesz mi w tym pomóc? Z góry dziękuję.

Odpowiedzi

1 KevinLu-MSFT Nov 20 2020 at 02:01

Repcak ma rację.

Gdy używasz polecenia rejestrowania do ustawiania zmiennych w programie PowerShell, możesz zmienić wartość zmiennej tylko w przebiegu potoku zamiast definicji wydania.

Aby zaktualizować definicję wydania w zadaniu PowerShell, możesz wypróbować następujące ustawienia potoku:

Dodaj dwa zadania programu PowerShell.

1. pierwsze zadanie programu PowerShell uruchom następujący skrypt:

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

Ten skrypt służy do aktualizowania wartości zmiennych podczas uruchamiania potoku.

2. Drugie zadanie programu PowerShell uruchom następujący skrypt:

$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"}

Uwaga: musisz również ustawić niektóre opcje wersji :

  1. Wybierz opcję: Allow scripts to access the OAuth tokenwReleases -> Agent Job

  2. Przyznaj Edit release pipelineuprawnienia roli:Project Collection Build Service (OrgName)

Wynik:

Aby uzyskać bardziej szczegółowe informacje, możesz zapoznać się z tym zgłoszeniem .

Repcak Nov 19 2020 at 15:17

Sposób, w jaki to robisz, aktualizuje tylko zmienną dla danego przebiegu potoku. Usługa Azure Pipelines importuje te zmienne z wyświetlanego interfejsu, a następnie można je zastąpić (wystąpienie zaimportowanej zmiennej). Aby zmienić zmienną w klasycznym interfejsie, należy wykonać wywołanie interfejsu API do AzureDevops.