Update2: Использование YAML должно быть самым простым решением. Если вы настаиваете на представлении Classi c. Вы можете попытаться выполнить sh, сохранив значения в файле (json, xml, yaml, что у вас есть), вы можете прочитать файл в задании, либо напрямую использовать, либо заново установить переменную ,
Когда вы ставите в очередь следующую сборку, это не повлияет на файл в системе управления версиями, и значение по умолчанию также не изменится.
Передача переменных между заданиями на одном этапе требует работы с выходными переменными.
Однако согласно это , using outputs in a different job
равно не поддерживается в Classi c UI Format .
В качестве обходного пути в этом сценарии вы можете совместно использовать переменные с помощью Переменные конвейера (совместно использовать переменные между заданиями в одном конвейере).
1.Вы можете установить key
переменная в конвейерных переменных:
2.Добавить одну задачу Powershell Inline с содержанием ниже в вашей первой работе:
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=5.0"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
# Update an existing variable to its new value
$pipeline.variables.key.value = "value"
####****************** update the modified object **************************
$json = @($pipeline) | ConvertTo-Json -Depth 99
$updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}
write-host "=========================================================="
Write-host "The value of Varialbe key is updated to" $updatedef.variables.key.value
write-host "=========================================================="
3. Запустите конвейер, в котором можно найти значение key
переменная успешно обновлена:
Таким образом, вы можете запустить скрипт ps в первом задании обновляет значение переменной key
, затем все последующие задания могут легко получить доступ к обновленной переменной.
Примечание:
- Для самого скрипта вам нужно всего лишь изменить строки
$pipeline.variables.key.value = "value"
(обязательно) и Write-host "The value of Varialbe key is updated to" $updatedef.variables.key.value
(необязательно).
Если я хочу установить для переменной с именем MyTest
значение MyValue
, строки должны быть $pipeline.variables.MyTest.value = "MyValue"
и Write-host "The value of Varialbe MyTest is updated to" $updatedef.variables.MyTest.value
.
Чтобы убедиться, что задача ps в одном задании может получить доступ к
OAuth Token
, нам нужно
Allow Scripts to Access OAuth Token
. Щелкните по названию задания агента и установите флажок:
Чтобы включить конвейер, у которого есть разрешение на обновление переменной конвейера (редактировать конвейер сборки), go Защита конвейера для установки
Edit build pipeline
allow для пользователя
xxx(ProjectName) build service
.