Azure добавляет начальный пробел к переменной

Если я запускаю этот код powershell локально:

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

Результат:

http://merge.azurewebsites.net

Когда я запускаю этот код в 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?

Какой у Вас вопрос? [усмехается] Если вы просто хотите удалить начальный пробел, используйте операцию обрезки. Что касается того, почему ведущее место там, понятия не имею :)

I.T Delinquent 13.06.2019 11:54

Если я запущу ваш самый первый пример кода в Azure, у меня не будет лишних пробелов. Содержит ли $env:prSourceBranchName начальный пробел?

AdminOfThings 13.06.2019 12:35

@AdminOfThings нет, у $env:prSourceBranchName нет ведущего пробела. В примере, который вы видите, я использую одни и те же значения (url, sourceBranchFromUrl) для обоих примеров. Единственное отличие состоит в том, что во втором примере я присваиваю значение переменной Azure.

Peter Boomsma 13.06.2019 13:11

@I.TDelinquent программно удалить начальный пробел несложно, но его вообще не должно быть :)

Peter Boomsma 13.06.2019 13:13
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
4
4
925
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

@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-адресе.

Другие вопросы по теме