Если я запускаю этот код powershell локально:
$url = "refs/pull/5625/merge"
$SourceBranchFromBuild = $url.split('/')[-1]
$featureReleaseUrl = "http://$sourceBranchFromBuild.azurewebsites.net"
Write-Output $featureReleaseUrl
Результат:
Когда я запускаю этот код в Azure Powershell:
$url = "refs/pull/5625/merge"
$SourceBranchFromBuild = $url.split('/')[-1]
Write-Host "##vso[task.setvariable variable=prSourceBranchName;]"$SourceBranchFromBuild
Затем создайте URL-адрес в другом сценарии Azure Powershell:
$featureReleaseUrl = "http://$env:prSourceBranchName.azurewebsites.net"
Write-Output $featureReleaseUrl
Выход
http:// merge.azurewebsites.net
Что вызывает этот ведущий космический символ в $env:prSourceBranchName
?
Если я запущу ваш самый первый пример кода в Azure, у меня не будет лишних пробелов. Содержит ли $env:prSourceBranchName
начальный пробел?
@AdminOfThings нет, у $env:prSourceBranchName
нет ведущего пробела. В примере, который вы видите, я использую одни и те же значения (url, sourceBranchFromUrl) для обоих примеров. Единственное отличие состоит в том, что во втором примере я присваиваю значение переменной Azure.
@I.TDelinquent программно удалить начальный пробел несложно, но его вообще не должно быть :)
@PeterBoomsma Попробуйте поместить $SourceBranchFromBuild в двойные кавычки следующим образом:
Write-Host "##vso[task.setvariable variable=prSourceBranchName;]$SourceBranchFromBuild"
Azure ничего не добавляет — добавляет ваш узел записи!
Ваш код делает это:
PS> $x = "xxx"
PS> write-host "aaa"$x
aaa xxx
но видимо ты хочешь
PS> $x = "xxx"
PS> write-host "aaa$x"
aaaxxx
Обратите внимание, где вторая цитата — это write-host
в обоих примерах. В первом это перед именем переменной $x
. Во втором - после.
В вашем вопросе он вызывает это (с кавычкой до имя переменной):
Write-Host "##vso[task.setvariable variable=prSourceBranchName;]"$SourceBranchFromBuild
который запишет команда регистрации в файл журнала, а Azure DevOps обработает это и обновит переменную среды.
Вероятно, вы ожидаете, что он запишет это в файл журнала:
##vso[task.setvariable variable=prSourceBranchName;]merge
но на самом деле пишет это:
##vso[task.setvariable variable=prSourceBranchName;] merge
Попробуйте переключить свой код на это (т.е. вторая кавычка после имя переменной):
Write-Host "##vso[task.setvariable variable=prSourceBranchName;]$SourceBranchFromBuild"
и он должен опускать пробел перед названием ветки в вашем URL-адресе.
Какой у Вас вопрос? [усмехается] Если вы просто хотите удалить начальный пробел, используйте операцию обрезки. Что касается того, почему ведущее место там, понятия не имею :)