Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure DevOps Services включает инструменты для совместной работы в области разработки, в том числе высокопроизводительные конвейеры, бесплатные частные репозитории Git, настраиваемые канбан-доски, а также различные автоматизированные и непрерывно работающие инструменты тестирования. Azure Pipelines — это функционал Azure DevOps, который позволяет управлять процессами непрерывной интеграции и доставки (CI/CD) для развертывания кода с использованием высокопроизводительных конвейеров, которые поддерживают любой язык, платформу и облако. Azure Data Explorer — Pipeline Tools — это задача Azure Pipelines, позволяющая создавать конвейеры выпуска и развертывать изменения базы данных в базах данных Azure Data Explorer. Она доступна бесплатно в Visual Studio Marketplace. Расширение включает следующие основные задачи:
Команда Azure Data Explorer— выполнение команд администратора в кластере Azure Data Explorer
Запрос Azure Data Explorer. Выполнение запросов к кластеру Azure Data Explorer и анализ результатов
Шлюз сервера запросов Azure Data Explorer — задача без агента для контроля выпусков в зависимости от результата запроса
В этом документе описывается простой пример использования задачи Azure Data Explorer - Pipeline Tools для развертывания изменений схемы в базе данных. Полное описание конвейеров CI/CD см. в документации по Azure DevOps.
Требуемые условия
- Подписка Azure. Создайте бесплатную учетную запись Azure.
- Кластер и база данных Azure Data Explorer. Создайте кластер и базу данных.
- Настройка кластера Azure Data Explorer:
- Создайте приложение Microsoft Entra, подготовив приложение Microsoft Entra.
- Предоставьте доступ к приложению Microsoft Entra в базе данных Azure Data Explorer, управляя разрешениями базы данных Azure Data Explorer.
- Настройка Azure DevOps:
- Установка расширения:
Если вы являетесь владельцем экземпляра Azure DevOps, установите расширение из Marketplace, в противном случае обратитесь к владельцу экземпляра Azure DevOps и попросите его установить.
Подготовка содержимого к выпуску
Для выполнения команд администратора в кластере в задаче можно использовать следующие методы:
Используйте шаблон поиска для получения нескольких файлов команд из локальной папки агента (файлов сборки или артефактов выпуска). Параметр с одной строкой поддерживает обработку нескольких файлов, применяя по одной команде на файл.
Напишите команды встроенно.
Укажите путь к файлу для получения файлов команд непосредственно из системы управления версиями Git (рекомендуется).
Создайте в репозитории Git следующие образцы папок (Functions, Policies, Tables). Скопируйте файлы из репозитория примеров в соответствующие папки и зафиксируйте изменения. Примеры файлов предоставляются для выполнения следующего рабочего процесса.
Совет
При создании собственного рабочего процесса рекомендуется сделать код идемпотентным. Например, используйте
.create-merge tableвместо.create table, и функцию.create-or-alterвместо функции.create.
Создание конвейера выпуска
Войдите в организацию Azure DevOps.
Выберите "Конвейеры выпусков>" в меню слева и выберите "Создать конвейер".
Откроется окно Новый конвейер выпуска. На вкладке Конвейеры в области Выбор шаблона выберите Пустое задание.
Нажмите кнопку "Этап ". В области "Этап " добавьте имя этапа и нажмите кнопку "Сохранить ", чтобы сохранить конвейер.
Нажмите кнопку Добавить артефакт. В области "Добавление артефакта" выберите репозиторий, в котором существует код, заполните соответствующие сведения и нажмите кнопку "Добавить". Щелкните Сохранить, чтобы сохранить конвейер.
На вкладке "Переменные" выберите +Добавить , чтобы создать переменную для URL-адреса конечной точки , используемого в задаче. Введите имя и значение конечной точки, а затем нажмите кнопку "Сохранить ", чтобы сохранить конвейер.
Чтобы найти URL-адрес конечной точки, перейдите на страницу обзора кластера Azure Data Explorer в портал Azure и скопируйте URI кластера. Создайте URI переменной в следующем формате
https://<ClusterURI>?DatabaseName=<DBName>. Например: https://kustodocs.westus.kusto.windows.net?DatabaseName=SampleDB
Создайте задачу развертывания папок
На вкладке "Конвейер" выберите 1 задание, 0 задачи, чтобы добавить задачи.
Повторите следующие шаги, чтобы создать задачи команд для развертывания файлов из папок Tables, Functions и Policies:
На вкладке Задачи выберите + от Задание агента и выполните поиск Azure Data Explorer.
В разделе Запуск команды Azure Data Explorer выберите Добавить.
Выберите Команда Kusto и обновите задачу, указав следующие сведения:
Отображаемое имя: имя задачи. Например,
Deploy <FOLDER>где<FOLDER>находится имя папки для создаваемой задачи развертывания.Путь к файлу: для каждой папки укажите путь, например
*/<FOLDER>/*.csl, где<FOLDER>— это соответствующая папка для задачи.URL-адрес конечной точки: укажите переменную
EndPoint URL, созданную на предыдущем шаге.Использовать конечную точку службы: выберите этот параметр.
Конечная точка службы: выберите существующую конечную точку службы или создайте новую (+ Создать), указав следующие сведения в окне Добавление подключения к службе Azure Data Explorer:
Настройка Предлагаемое значение метод проверки подлинности Настройте учетные данные федеративного удостоверения (FIC) (рекомендуется) или выберите проверку подлинности субъекта-службы (SPA). Имя подключения Введите имя для обозначения этой конечной точки службы URL-адрес кластера Значение можно найти в разделе обзорной информации о Azure Data Explorer Cluster на портале Azure Идентификатор сервисного принципала Введите идентификатор приложения Microsoft Entra (созданный в качестве предварительных требований) Ключ приложения субъекта-службы Введите ключ приложения Microsoft Entra (созданный в качестве предварительных требований) Идентификатор клиента Microsoft Entra Введите клиент Microsoft Entra (например, microsoft.com или contoso.com)
Установите флажок Разрешить всем конвейерам использовать это подключение, а затем нажмите кнопку ОК.
Если команды администратора являются длительными асинхронными операциями, установите флажок Ожидание завершения длительных асинхронных команд администратора. Когда включена, задача опрашивает состояние операции, пока команда
.show operationsне завершится.
Выберите "Сохранить", а затем на вкладке "Задачи " убедитесь, что существуют три задачи: развертывание таблиц, развертывание функций и развертывание политик.
Создание задачи запроса
При необходимости создайте задачу для выполнения запроса к кластеру. Запросы в конвейере сборки или релиза можно использовать для проверки набора данных, при этом шаг может завершиться успехом или сбоем на основе результатов запроса. Критерии успешного выполнения задач могут быть основаны на пороговом значении счетчика строк или отдельном значении в зависимости от того, что возвращается в ответ на запрос.
На вкладке Задачи выберите + от Задание агента и выполните поиск Azure Data Explorer.
В разделе Запуск запроса Azure Data Explorer выберите Добавить.
Выберите Запрос Kusto и обновите задачу, внесите следующую информацию:
- Отображаемое имя: имя задачи. Например, кластер запросов.
- Тип: выберите Встроенный.
- Запрос: введите запрос, который необходимо выполнить.
-
URL-адрес конечной точки: укажите переменную
EndPoint URL, созданную ранее. - Использовать конечную точку службы: выберите этот параметр.
- Конечная точка службы: выберите конечную точку службы.
В разделе «Результаты задачи» выберите условия успешного выполнения задачи на основе результатов запроса следующим образом:
Если запрос возвращает строки, выберите Количество строк и укажите нужные критерии.
Если запрос возвращает значение, выберите Единственное значение и укажите ожидаемый результат.
Создание задачи для шлюза сервера запросов
При необходимости создайте задачу для выполнения запроса к кластеру и заблокируйте прогресс выпуска до выполнения условия по количеству строк результатов запроса. Задача шлюза запросов сервера — это безагентное задание, означающее, что запрос выполняется непосредственно на Azure DevOps Server.
На вкладке Задачи выберите +, используя Задание без агента, и найдите Azure Data Explorer.
В разделе Запуск шлюза сервера запросов Azure Data Explorer выберите Добавить.
Выберите Шлюз сервера запросов Kusto, а затем выберите Тест шлюза сервера.
Настройте задачу, указав следующие сведения:
- Отображаемое имя: имя шлюза.
- Конечная точка службы: выберите конечную точку службы.
- Имя базы данных: укажите имя базы данных.
- Тип: выберите Встроенный запрос.
- Запрос: введите запрос, который необходимо выполнить.
- Максимальное пороговое значение: укажите максимальное число строк для критериев успешного выполнения запроса.
Примечание.
При запуске релиза вы должны увидеть результаты, подобные приведённым ниже.
Запуск релиза
Нажмите кнопку "+ Создать выпуск>", чтобы начать выпуск.
На вкладке Журналы убедитесь, что развертывание выполнено успешно.
Теперь будет завершено создание конвейера выпуска для предварительного развертывания.
Поддержка проверки подлинности без ключа для задач DevOps в Azure Data Explorer
Расширение поддерживает безключевую проверку подлинности для кластеров Azure Data Explorer. Бесключевая аутентификация позволяет аутентифицироваться в кластерах Azure Data Explorer без использования ключа. Это безопаснее и проще управлять.
Примечание.
URL-адреса кластера Kusto Fabric не поддерживаются для проверки подлинности федерации удостоверений для рабочих нагрузок (WIF) и управляемой идентификации.
Использование аутентификации с использованием федеративных удостоверений (FIC) в подключении службы Azure Data Explorer
Примечание.
Начиная с версии расширения 4.0.x, служба Azure Data Explorer Service Endpoint поддерживает аутентификацию с федерацией удостоверений для рабочей нагрузки (WIF), а также аутентификацию с помощью главного приложения.
В вашем экземпляре DevOps перейдите к Настройкам проекта>, Подключениям служб>, Новое подключение службы>, и выберите Azure Data Explorer.
Выберите федеративные учетные данные удостоверения и введите URL-адрес кластера, идентификатор субъекта-службы, идентификатор клиента, имя подключения к службе и нажмите кнопку "Сохранить".
В портал Azure откройте приложение Microsoft Entra для указанного субъекта-службы.
В разделе "Сертификаты и секреты" выберите федеративные учетные данные.
Выберите "Добавить учетные данные", а затем для сценария федеративных учетных данных выберите "Другой издатель" и заполните параметры, используя следующие сведения:
Издатель:
<https://vstoken.dev.azure.com/{System.CollectionId}>где{System.CollectionId}является идентификатором коллекции вашей организации Azure DevOps. Идентификатор коллекции можно найти следующим образом:- В классическом конвейере публикации Azure DevOps выберите Initialize job. Идентификатор коллекции отображается в журналах.
Идентификатор субъекта:
<sc://{DevOps_Org_name}/{Project_Name}/{Service_Connection_Name}>где{DevOps_Org_name}находится имя организации Azure DevOps,{Project_Name}имя проекта и{Service_Connection_Name}имя подключения службы, созданное ранее.Примечание.
Если в имени подключения к службе есть пробел, его можно использовать с пробелом в поле. Например:
sc://MyOrg/MyProject/My Service Connection.Имя: введите имя для учетных данных.
Выберите Добавить.
Используйте федеративные учетные данные идентификации или управляемую идентификацию в подключении службы Azure Resource Manager (ARM)
В экземпляре DevOps перейдите к Параметры проекта>Подключения сервисов>Новое подключение сервиса>Диспетчер ресурсов Azure.
В разделе «Метод проверки подлинности» выберите «Федерация идентификаций рабочего процесса (автоматически)», чтобы продолжить. Вы также можете использовать параметр федерации удостоверений рабочей нагрузки (вручную) для указания сведений о федерации удостоверений рабочей нагрузки или параметр управляемое удостоверение. Узнайте больше о настройке управляемого удостоверения с помощью управления ресурсами Azure в подключениях службы Azure Resource Manager (ARM).
Заполните необходимые сведения, нажмите кнопку "Проверить", а затем нажмите кнопку "Сохранить".
Конфигурация конвейера YAML
Задачи можно настроить с помощью веб-интерфейса Azure DevOps или кода YAML в схеме конвейера.
Расширение предоставляет три задачи конвейера, доступные через YAML:
-
Команда Azure Data Explorer (
ADXAdminCommand@5) — выполнение команд администратора и управления в кластере ADX - Запрос Azure Data Explorer — выполнение запросов к кластеру ADX и анализ результатов
- Шлюз сервера запросов Azure Data Explorer — безагентская задача для управления релизами по результатам запроса
Совет
Для повышения безопасности используйте федерацию удостоверений рабочей нагрузки или проверку подлинности управляемого удостоверения через соединение службы Azure Resource Manager, вместо хранения учетных данных прямо в конвейере. Эти методы проверки подлинности без ключей являются рекомендуемой практикой.
Пример команды администратора — встроенные команды
В следующем примере выполняется прямая команда администратора с использованием подключения службы Azure Resource Manager (ARM), поддерживающего аутентификацию через федерацию удостоверений для рабочих нагрузок (WIF) и управляемую идентификацию.
steps:
- task: Azure-Kusto.ADXAdminCommands.PublishToADX.ADXAdminCommand@5
displayName: 'Run inline ADX admin command'
inputs:
clusterUri: 'https://<ClusterName>.<Region>.kusto.windows.net'
databaseName: '<DatabaseName>'
commandsSource: 'inline'
inlineCommands: |
.create-merge table MyTable (Id:int, Name:string, Timestamp:datetime)
.create-or-alter function MyFunction() { MyTable | take 10 }
azureSubscription: '<ARM Service Connection Name>'
continueOnError: true
Пример команды администратора — команды на основе файлов
В этом примере запускаются команды администратора из файлов, соответствующих паттерну glob, с помощью аутентификации регистрации приложения AAD.
steps:
- task: Azure-Kusto.ADXAdminCommands.PublishToADX.ADXAdminCommand@5
displayName: 'Deploy schema from files'
inputs:
clusterUri: 'https://<ClusterName>.<Region>.kusto.windows.net'
databaseName: '<DatabaseName>'
commandsSource: 'files'
commandFilesPattern: '**/*.csl'
aadAppId: '$(AAD_APP_ID)'
aadAppKey: '$(AAD_APP_KEY)'
aadTenantId: '$(AAD_TENANT_ID)'
continueOnError: true
Вы также можете использовать **/*.kql в качестве шаблона glob в зависимости от соглашения об именовании файлов.
Пример команды администратора — подключение службы Azure Resource Manager
В следующем примере используется подключение службы Azure Resource Manager, которое поддерживает федерацию удостоверений рабочей нагрузки (WIF) и управляемое удостоверение для проверки подлинности без ключа:
steps:
- task: Azure-Kusto.ADXAdminCommands.PublishToADX.ADXAdminCommand@5
displayName: 'Deploy schema via ARM service connection'
inputs:
clusterUri: 'https://<ClusterName>.<Region>.kusto.windows.net'
databaseName: '<DatabaseName>'
commandsSource: 'files'
commandFilesPattern: '**/*.csl'
azureSubscription: '<ARM Service Connection Name>'
continueOnError: true
condition: ne(variables['ProductVersion'], '')
Входные параметры задачи
В следующей таблице описаны ключевые входные параметры для ADXAdminCommand@5 задачи:
| Параметр | Описание |
|---|---|
clusterUri |
Базовый универсальный код ресурса (URI) для кластера Kusto (например, https://<ClusterName>.<Region>.kusto.windows.net) |
databaseName |
название целевой базы данных |
commandsSource |
Источник команд: inline для встроенных команд KQL или files для команд на основе файлов |
inlineCommands |
Встроенные команды KQL для выполнения (используется, когда commandsSource является inline) |
commandFilesPattern |
Шаблон glob для файлов скриптов (используется, когда commandsSource это files), например **/*.csl или **/*.kql |
aadAppId |
Идентификатор приложения Microsoft Entra (учетная запись службы) для аутентификации приложения Azure AD |
aadAppKey |
Ключ или секрет приложения Microsoft Entra для проверки подлинности приложения AAD |
aadTenantId |
Идентификатор клиента Microsoft Entra для проверки подлинности приложения AAD |
azureSubscription |
Имя подключения службы Azure Resource Manager для проверки подлинности на основе ARM (поддерживает WIF и управляемое удостоверение) |
Методы аутентификации
Расширение поддерживает следующие методы проверки подлинности:
-
Регистрация приложений Azure Active Directory (AAD) — используйте
aadAppId,aadAppKeyиaadTenantIdдля аутентификации с использованием учетной записи службы. Сохраните учетные данные в виде безопасных переменных конвейера. - Проверка подлинности на основе сертификатов — используйте сертификат вместо ключа приложения для проверки подлинности субъекта-службы. Сохраните сведения о сертификате в виде безопасных переменных конвейера.
-
Управляемое удостоверение — используйте подключение службы Azure Resource Manager, настроенное с управляемым удостоверением. Задайте входные
azureSubscriptionданные для имени подключения службы. -
Workload Identity Federation (WIF) — используйте подключение службы Azure Resource Manager с Workload Identity Federation (автоматически или вручную). Это рекомендуемый подход без ключа. Задайте входной параметр
azureSubscriptionдля имени подключения к службе.
Примечание.
Workload Identity Federation (WIF) — это новое дополнение к расширению. Он обеспечивает проверку подлинности без секретов и рекомендуется использовать для новых конвейеров обработки данных. См. инструкции по настройке в использовании федеративных учетных данных идентификации или управляемых удостоверений в сервисном подключении Azure Resource Manager (ARM).
Пример запроса
steps:
- task: Azure-Kusto.PublishToADX.ADXQuery.ADXQuery@5
displayName: '<Task Display Name>'
inputs:
targetType: 'inline'
script: |
let badVer=
RunnersLogs | where Timestamp > ago(30m)
| where EventText startswith "$$runnerresult" and Source has "ShowDiagnostics"
| extend State = extract(@"Status='(.*)', Duration.*",1, EventText)
| where State == "Unhealthy"
| extend Reason = extract(@'"NotHealthyReason":"(.*)","IsAttentionRequired.*',1, EventText)
| extend Cluster = extract(@'Kusto.(Engine|DM|CM|ArmResourceProvider).(.*).ShowDiagnostics',2, Source)
| where Reason != "Merge success rate past 60min is < 90%"
| where Reason != "Ingestion success rate past 5min is < 90%"
| where Reason != "Ingestion success rate past 5min is < 90%, Merge success rate past 60min is < 90%"
| where isnotempty(Cluster)
| summarize max(Timestamp) by Cluster,Reason
| order by max_Timestamp desc
| where Reason startswith "Differe"
| summarize by Cluster
;
DimClusters | where Cluster in (badVer)
| summarize by Cluster , CmConnectionString , ServiceConnectionString ,DeploymentRing
| extend ServiceConnectionString = strcat("#connect ", ServiceConnectionString)
| where DeploymentRing == "$(DeploymentRing)"
kustoUrls: 'https://<ClusterName>.kusto.windows.net?DatabaseName=<DatabaseName>'
authType: 'kustoserviceconn'
connectedServiceName: '<connection service name>'
minThreshold: '0'
maxThreshold: '10'
continueOnError: true