Нам нужно зарегистрировать HTTP-прослушиватель на наших серверах сборки и хотим, чтобы все шаги нашего конвейера были «зелеными», когда все в порядке. Итак, чтобы наш код работал, нам нужно запустить следующий код:
netsh http add urlacl url=http://+:8080/
Однако при двукратном запуске на сервере сборки мы получаем следующую ошибку:
Url reservation add failed, Error: 183 Cannot create a file when that file already exists.
Все идет нормально. Однако, если мы когда-нибудь изменим серверы сборки или добавим/удалем некоторые из них и т. д., наш код может больше не работать. И если это произойдет через несколько месяцев/лет, кто вспомнит о добавлении прослушивателя http...
Итак, есть ли способ условно добавить код urlacl?
Что-то вроде:
netsh http show urlacl url=http://+:8080/
{If No results, only then run the following line of code, otherwise do nothing else:}
netsh http add urlacl url=http://+:8080/
Обходным решением было бы задокументировать это где-нибудь, и если мы когда-нибудь снова столкнемся с проблемами, запомните, где это было задокументировано. Или выполнять этот шаг всегда, но добавлять «условие: SuccessedOrFailed()» к следующему шагу YAML? Однако эти варианты не являются предпочтительными.





Итак, есть ли способ условно добавить код urlacl?
Вы можете использовать задачу PowerShell для запуска следующего сценария для условного добавления кода urlacl.
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$urlacl = netsh http show urlacl url=http://+:8080/
if ($urlacl -like "*Reserved URL : http://+:8080/*") {
Write-Host "URL reservation already exists, no action taken."
} else {
netsh http add urlacl url=http://+:8080/ user=DOMAIN\user
netsh http show urlacl url=http://+:8080/
}
Вот мой результат теста:
Это именно то, что мне нужно! Большое спасибо!
Рад помочь Вам с проблемой. Приятного кодирования! :)
Это помогает? stackoverflow.com/questions/54943838/…