VSTS将变量传递到Azure PowerShell脚本参数中

时间:2017-09-19 14:32:54

标签: powershell azure-devops

我有多个Azure PowerShell任务,我想在其中传递变量。目前我正在使用脚本参数传递变量,如屏幕截图所示: enter image description here

脚本参数的问题在于,如果有变化,我必须在每个过程中编辑它们。是否可以只有一个可以链接到多个进程的变量? 我看过VSTS: Pass build variables into Powershell script task,但无论我如何编辑我的脚本,他们都拒绝工作。该主题也没有解释是否应将变量放入流程变量或队列构建变量中。 这是我试图自动化的脚本:

    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

2 个答案:

答案 0 :(得分:1)

以下是我正在使用的内容:

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

我正在使用VSTS库变量组,您可以将变量组链接到不同的发布管道。

答案 1 :(得分:1)

只需对如何使用上述变量组进行更多开发,就可以在Azure DevOps上的“库”子菜单的“管道菜单”中对其进行声明。在下图中,我声明了一个名为Tailspin Space Game - Release

的变量组

Variable groups on Azure DevOps Pipelines


然后我可以按如下方式在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