VSTS передает переменные в аргументы скрипта Azure PowerShell

У меня есть несколько задач Azure PowerShell, в которых я хочу передать переменные. В настоящее время я передаю переменные с аргументами скрипта, как на скриншоте:

Проблема с аргументами скрипта состоит в том, что мне придется редактировать их в каждом процессе, если есть изменения. Можно ли иметь только одну переменную, которую я могу связать с несколькими процессами? Я посмотрел на VSTS: передать переменные сборки в задачу скрипта Powershell, но как бы я ни редактировал мои скрипты, они отказываются работать. В этом разделе также не объясняется, должны ли переменные помещаться в переменные процесса или в переменные построения очереди. Вот скрипт, который я пытаюсь автоматизировать:

    param
(
    [Parameter(Mandatory)]
    [String]$NewFileLocation1
)

Set-AzureRmVMCustomScriptExtension -Argument "-NewFileLocation1 $NewFileLocation" -ResourceGroupName Test-RG1`
    -VMName VM1 `
    -Location northeurope `
    -FileUri https://raw.githubusercontent.com/x/assets/master/PowerShell/PS1/PS1/PS1.ps1 `
    -Run 'PS1.ps1' `
    -Name PS1

PS1.ps:

    param
(
    [Parameter(Mandatory)]
    [String]$NewFileLocation

)
New-Item $NewFileLocation

1 ответ

Решение

Вот что я использую:

Param (
    [string]$location = $env:location,
    ...
    [string]$tagEnvironment = $env:tagEnvironment
)

Я использую группы переменных библиотеки VSTS, вы можете связать группы переменных с различными конвейерами выпуска.

Чтобы немного подробнее рассказать о том, как использовать вышеупомянутые группы переменных, в Azure DevOps вы можете объявить их в меню конвейеров в подменю библиотеки. На изображении ниже я объявляю группу переменных с именемTailspin Space Game - Release


Затем я могу ссылаться на группы переменных в коде YAML следующим образом:

variables:
- group: 'Timeline CV - Release'

А затем мне пришлось бы передать их в PowerShell в качестве аргументов следующим образом:

- task: PowerShell@2
        displayName: 'Run PowerShell Task'
        inputs:
          filePath: 'path\to\powershell\script\script.ps1'
          arguments: '$(groupVar1) $(groupVar2) $(groupVar3)'

Переменные сборки будут доступны для сценария PowerShell без явной передачи их в качестве аргументов таким образом. Однако мне не удалось добиться того же с какой-либо переменной в группе переменных.


Теперь я могу использовать группы переменных в сценарии PowerShell, который вызывается в задаче PowerShell, следующим образом:

$GroupVar1OnPowerShellScript = $env:groupVar1
$GroupVar2OnPowerShellScript = $env:groupVar2
$GroupVar3OnPowerShellScript = $env:groupVar3
Другие вопросы по тегам