Вы пишете некоторые тесты интеграционных тестов и, как часть этого, чтобы вы должны проверить некоторые ресурсы Azure — возможно, посмотрите в базу данных, проверьте сообщения об услуге — вам нужен доступ к какой-нибудь инфраструктуре Azure, чтобы утверждать, что ожидаемые вещи произошли. При запуске от Azure DEVOPS вы можете воспользоваться преимуществами управляемой идентичности и избежать любых соединительных строк в вашем тестовом коде
Azure DevOps
Если вы пишете DevOps Pirelines, вы можете настроить сервисные соединения в вашем проекте, который Дайте вам доступ к подпискам Azure Отказ Сервисное подключение к Azure от DEVOPS связано со главным именем службы (SPN).
После того, как у вас есть подключение и SPN, ваши трубопроводы YAML могут использовать это для аутентификации с Azure при запуске определенных задач. Возможен подлый способ достижения управления личности, это действительно полезно для тестирования интеграции.
Задача тестирования
Для этого будет работать, ваш тестовый проект должен быть проектом Dotnet, и тесты должны быть в состоянии выполнить с помощью Dotnet Test
Отказ
В рамках проекта Test я собираюсь предположить, что вы хотите сделать несколько вещей.
Имеют разные конфигурации, в зависимости от среды, которые вы тестируете и подключаетесь к различным ресурсам Azure, в зависимости от окружающей среды.
Наследование контекста безопасности сервисной связи, поэтому нет необходимости иметь никаких подключенных строк в вашем испытательном пакете.
Мы можем выполнить Dotnet Test
и оберните его с задачей AzureCli, проходящие в сервисном соединении и деталях окружающей среды, как так
Делая это, мы получаем немного добра свободно. Задача AzureCli будет подтверждена подлинностью с подключением сервисного подключения и получить токен перед запуском скрипта, и после этого будет выполняться приметки — мы получим форму управления токеном для нас.
Прохождение в Aspnetcore_environment.
Мы можем принять решения в коде для Загрузите локальные файлы настроек и создайте наши значения конфигурации на основе различных источников. Затем вы можете иметь файлы AppSettings для различных сред, позволяя вам указать разные ресурсы для взаимодействия с
private IConfigurationRoot GetConfiguration(string outputPath) { // Read the ASPNETCORE_ENVIRONMENT variable we passed in var envName = EnvironmentData.AspNetCoreEnvironment; return new ConfigurationBuilder() .SetBasePath(outputPath) .AddJsonFile("appsettings.json", true) .AddJsonFile($"appsettings.{envName}.json", true) .AddEnvironmentVariables() .Build(); }
ОК, — так вы аутентифицировали с Azure, используя задачу Azurecli — но как вы можете использовать токен в вашем коде?
Тестовый пакет
Это хорошая часть, и Microsoft сделала это действительно легко для нас с DelexAzurecredential класс от лазурного лазура. Пакет удостоверения личности. Как описано, класс проверит ряд мест, чтобы попытаться получить контекст безопасности, и потому что мы провели проверку задачей Azurecli, мы получим токен для нашего сервисного подключения. Хороший!
В коде, будет выглядеть так.
private async TaskGetAccessToken() { var dac = new DefaultAzureCredential( new DefaultAzureCredentialOptions { ExcludeSharedTokenCacheCredential = true }); return await dac.GetTokenAsync( new Azure.Core.TokenRequestContext(new[] { $"https://management.azure.com/.default" })); }
NB: Я нашел, что должен был ExcludeSharedtokencachecredential для последовательных результатов.
Как только вы на данный момент вы обнаружите, что многие из Azure SDK будут иметь точки входа, которые позволяют использовать класс напрямую. Вы можете пройти экземпляр of DelexAzurecredential в классе — см. Вот для некоторых примеров Отказ
Теперь просто случай убедитесь, что SPN, который вы используете, есть разрешения на вещи, с которыми вы хотите интегрировать тест. Вам может понадобиться Выполните некоторые роли для установить эти разрешения.
Упаковывать его вверх
При настройке подключения SPN и обслуживания мы можем выполнить наши тесты с использованием задачи AzureCli, которая будет аутентифицироваться с Azure и сделать токен доступным, что мы можем затем подобрать из тестовой пакеты C # с помощью DEALKAZURECRECRECTION.
Это действительно мощный — Поскольку это означает, что при запуске тестов локально вы можете иметь тесты в соответствии с вашим контекстом безопасности в качестве идентификатора, либо вы можете предоставить переменные среды и получить контекст SPN. Нет изменения кода, и ваш тестовый пакет полностью портативный и с радостью будет работать в средах Windows или Linux.
Это означает, что у нас нет никаких соединительных строк в наших тестовых решениях, и мы используем токены доступа и RBAC в Azure, что сохраняет управление конфигурацией простой и использует согласованную архитектуру безопасности Azure.
Это просто, чтобы идти И я нашел, что это действительно сделало наши тестовые взаимодействия с Azure легко управлять.
Оригинал: «https://dev.to/dylanmorley/azure-devops-managed-identity-for-automation-tests-3321»