我现在使用一些自定义的PowerShell脚本来完成这个任务。
在构建任务中,我编写了一个包含所需变量的XML文件,该XML文件随后成为Artifact的一部分。
因此,首先我使用XML文件的路径、变量名称和当前值调用我的自定义脚本:
![enter image description here](https://istack.dev59.com/372y4.webp)
这个 Powershell 脚本是这样的。
Param
(
[Parameter(Mandatory=$true)]
[string]$xmlFile,
[Parameter(Mandatory=$true)]
[string]$variableName,
[Parameter(Mandatory=$true)]
[string]$variableValue
)
$directory = Split-Path $xmlFile -Parent
If (!(Test-Path $xmlFile)){
If (!(Test-Path $directory)){
New-Item -ItemType directory -Path $directory
}
Out-File -FilePath $xmlFile
Set-Content -Value "<Variables/>" -Path $xmlFile
}
$xml = [System.Xml.XmlDocument](Get-Content $xmlFile);
$xml["Variables"].AppendChild($xml.CreateElement($variableName)).AppendChild($xml.CreateTextNode($variableValue));
$xml.Save($xmlFile)
这将导致生成如下的XML:
<Variables>
<Branch>Main</Branch>
</Variables>
然后我将其复制到工件暂存目录中,以使其成为工件的一部分。
在发布任务中,我使用另一个powershell脚本,通过读取xml设置任务变量。
第一个参数是xml文件的位置,第二个是任务变量(您必须在发布管理中创建该变量),最后一个是xml中的节点名称。
![enter image description here](https://istack.dev59.com/XTwCN.webp)
读取 XML 并设置变量的 PowerShell 代码如下:
Param
(
[Parameter(Mandatory=$true)]
[string]$xmlFile,
[Parameter(Mandatory=$true)]
[string]$taskVariableName,
[Parameter(Mandatory=$true)]
[string]$xmlVariableName
)
$xml = [System.Xml.XmlDocument](Get-Content $xmlFile);
$value = $xml["Variables"][$xmlVariableName].InnerText
Write-Host "##vso[task.setvariable variable=$taskVariableName;]$value"