Я развертываю веб-службу C# ASP.NET Core в Azure с помощью Pulumi. Я могу развернуть его тремя способами:
- Запустите его локально из Visual Studio, т. е. вообще не используя Azure.
- Разверните его в Azure с моего локального компьютера разработчика.
- Разверните его в Azure из Jenkins (который работает на другом компьютере).
У меня есть проблема:
- Когда я запускаю его локально, я могу вызвать службу нормально, например. из Postman или из приложения C#. Веб-служба возвращает то, что я ожидаю.
- Когда я развертываю его в Azure со своего локального компьютера, я также могу сказать, что все в порядке. Веб-служба возвращает то, что я ожидаю.
- Когда я развертываю его в Azure из Jenkins, а затем пытаюсь вызвать веб-сервис, он возвращает NotFound на все вызовы, независимо от того, что я делаю. (Предположительно это означает HTTP 404.)
Развертывания во 2 и 3 должны быть точно такими же. Мой вопрос: Как узнать, в чем разница между этими двумя развертываниями в Azure?
Развернутый Jenkins веб-сервис демонстрирует следующее любопытное поведение:
- Он не регистрирует никаких исключений (даже когда я жду их появления несколько минут).
- Если я зайду в свою группу ресурсов -> Application Insights -> Журналы и найду запросы, там будут запросы. Любопытно, что он говорит, что возвращает HTTP 200 на все запросы, хотя я получаю при их вызове 404.
- Вышеприведенное верно даже для вызовов веб-служб, которые никогда не должны возвращать 200 (они должны возвращать 201).
- Вышеупомянутое верно даже для вызовов веб-службы к методам, которые даже не должны существовать (т. Е. Когда я преднамеренно искажаю URI метода перед вызовом службы).
Во время развертывания я аутентифицируюсь в Azure, используя субъект-службу. Мой Jenkinsfile выглядит так:
withVaultSecrets([
"path/to/secret/in/vault": [
"sp_name", "application_id", "object_id", "sp_secret"
]
]){
script {
env.PULUMI_CONFIG_PASSPHRASE = 'jenkinspassphrase'
env.ARM_CLIENT_ID = "${application_id}"
env.ARM_CLIENT_SECRET = "${sp_secret}"
env.ARM_TENANT_ID = "${azure_dev_tenant_id}"
env.ARM_SUBSCRIPTION_ID = "${azure_dev_subscription_id}"
env.AZURE_CLIENT_ID = "${application_id}"
env.AZURE_CLIENT_SECRET = "${sp_secret}"
env.AZURE_TENANT_ID = "${azure_dev_tenant_id}"
}//script
dir("./src/deploy/KmsStack"){
powershell "pulumi login --local";
powershell "pulumi stack init jenkinsfunctionaltest --secrets-provider=passphrase"
powershell "pulumi up --yes"
}//dir
}//withVaultSecrets
Сценарий, который я использую для локального развертывания, выглядит следующим образом с теми же учетными данными субъекта-службы:
cd $PSScriptRoot
cd webapi
dotnet publish /p:DisableGitVersionTask=true
cd ../deploy/KmsStack
$env:PULUMI_CONFIG_PASSPHRASE = 'jenkinspassphrase'
$env:ARM_CLIENT_ID = ...
$env:ARM_CLIENT_SECRET = ...
$env:ARM_TENANT_ID = ...
$env:ARM_SUBSCRIPTION_ID = ...
$env:AZURE_CLIENT_ID = ...
$env:AZURE_CLIENT_SECRET = ...
$env:AZURE_TENANT_ID = ...
pulumi logout
pulumi login --local
pulumi stack rm jenkinsfunctionaltest -y
pulumi stack init jenkinsfunctionaltest --secrets-provider=passphrase
pulumi stack select jenkinsfunctionaltest
pulumi up --yes
Как узнать, почему эти две развернутые службы ведут себя по-разному? Графический интерфейс портала Azure насыщен и содержит множество разделов. Можете ли вы порекомендовать мне, где искать? Может быть какие-то настройки безопасности отличаются? Как мне их найти?
Заранее спасибо!
dotnet publish
для обоих, да. Как получить конфигурацию службы приложений в формате, который может прочитать Блокнот? - person Claus Appel   schedule 24.02.2021