Azure 向变量添加前导空格

Pet*_*sma 5 powershell azure

如果我在本地运行此 powershell 代码:

$url = "refs/pull/5625/merge"
$SourceBranchFromBuild = $url.split('/')[-1]
$featureReleaseUrl = "http://$sourceBranchFromBuild.azurewebsites.net"
Write-Output $featureReleaseUrl
Run Code Online (Sandbox Code Playgroud)

输出是:

http://merge.azurewebsites.net

当我在 Azure Powershell 上运行此代码时:

$url = "refs/pull/5625/merge"
$SourceBranchFromBuild = $url.split('/')[-1]
Write-Host "##vso[task.setvariable variable=prSourceBranchName;]"$SourceBranchFromBuild
Run Code Online (Sandbox Code Playgroud)

然后在另一个 Azure Powershell 脚本中创建 URL:

$featureReleaseUrl = "http://$env:prSourceBranchName.azurewebsites.net"
Write-Output $featureReleaseUrl
Run Code Online (Sandbox Code Playgroud)

输出是

http://merge.azurewebsites.net

是什么导致了这个前导空格字符$env:prSourceBranchName

mcl*_*ton 7

Azure 没有添加任何内容 - 您的写入主机才是!

你的代码正在这样做:

PS> $x = "xxx"
PS> write-host "aaa"$x
aaa xxx
Run Code Online (Sandbox Code Playgroud)

但大概你想要

PS> $x = "xxx"
PS> write-host "aaa$x"
aaaxxx
Run Code Online (Sandbox Code Playgroud)

请注意两个示例中第二个引号的位置write-host。在第一个中,它位于$x变量名称之前。在第二个之后。

在你的问题中,它调用它(在变量名称之前加上引号):

Write-Host "##vso[task.setvariable variable=prSourceBranchName;]"$SourceBranchFromBuild
Run Code Online (Sandbox Code Playgroud)

这会将日志记录命令写入日志文件,Azure DevOps 将处理该命令并更新环境变量。

您可能希望它将以下内容写入日志文件:

##vso[task.setvariable variable=prSourceBranchName;]merge
Run Code Online (Sandbox Code Playgroud)

但它实际上是这样写的:

##vso[task.setvariable variable=prSourceBranchName;] merge
Run Code Online (Sandbox Code Playgroud)

尝试将代码切换为此(即变量名称后的第二个引号):

Write-Host "##vso[task.setvariable variable=prSourceBranchName;]$SourceBranchFromBuild"
Run Code Online (Sandbox Code Playgroud)

并且它应该省略 url 中分支名称前面的空格。