你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 Azure 数据资源管理器的 Azure DevOps 任务
Azure DevOps Services 提供开发协作工具,例如高性能管道、免费专用 Git 存储库、可配置看板,以及各种自动化和持续测试功能。 Azure Pipelines 是 Azure DevOps 中的一项功能,可用于管理适用于任何语言、平台和云的 CI/CD(使用高性能管道部署代码)。 Azure 数据资源管理器 - 管道工具是 Azure Pipelines 的一项任务,可用于创建发布管道,以及将数据库更改部署到 Azure 数据资源管理器数据库。 它在 Visual Studio Marketplace 中免费提供。 此扩展包括 3 个基本任务:
Azure 数据资源管理器命令 - 针对 Azure 数据资源管理器群集运行命令
Azure 数据资源管理器查询 - 针对 Azure 数据资源管理器群集运行查询并分析结果
Azure 数据资源管理器查询服务器入口 - 入口的无代理任务根据查询结果发布
本文档介绍一个简单的示例,说明如何使用 “Azure 数据资源管理器 - 管道工具”任务将架构更改部署到数据库。 有关完整的 CI/CD 管道,请参阅 Azure DevOps 文档。
先决条件
- Azure 订阅。 创建免费 Azure 帐户。
- Azure 数据资源管理器群集和数据库。 创建群集和数据库。
- Azure 数据资源管理器群集设置:
- 通过预配Microsoft Entra应用程序创建Microsoft Entra应用。
- 通过管理 Azure 数据资源管理器数据库权限,授予对 Azure 数据资源管理器 数据库Microsoft Entra应用的访问权限。
- Azure DevOps 设置:
- 扩展安装:
准备发布内容
有三种方法可以对任务中的群集运行管理员命令。
使用搜索模式从本地代理文件夹(生成源或发布项目)获取多个命令文件
编写内联命令
指定文件路径,以直接从 git 源代码管理获取命令文件(推荐)
在 Git 存储库中创建以下示例文件夹(“Functions”、“Policies”、“Tables”) 。 如下所示,将文件从此处复制到相应的文件夹中,并提交更改。 提供示例文件以执行以下工作流。
提示
创建自己的工作流时,建议使用幂等方法编写代码。 例如,使用
.create-merge table
而不是.create table
,并使用.create-or-alter
函数而不是.create
函数。
创建发布管道
登录到你的 Azure DevOps 组织。
从左侧菜单选择“管道”>“发布”,然后选择“新建管道” 。
“新建发布管道”窗口随即打开。 在“管道”选项卡的“选择模板”窗格中,选择“空作业” 。
选择“阶段”按钮。 在“阶段”窗格中,添加“阶段名称” 。 选择“保存”以保存管道。
选择“添加项目”按钮。 在“添加项目”窗格中,选择代码所在的存储库,填写相关信息,然后单击“添加” 。 选择“保存”以保存管道。
在“变量”选项卡中,选择“+ 添加”,为将在任务中使用的“终结点 URL”创建变量 。 填写终结点的“名称”和“值” 。 选择“保存”以保存管道。
要查找 Endpoint_URL,请前往 Azure 门户中 Azure 数据资源管理器群集的概述页面,查看 Azure 数据资源管理器群集 URI。 采用以下格式
https://<Azure Data Explorer cluster URI>?DatabaseName=<DBName>
构造 URI。 例如: https://kustodocs.westus.kusto.windows.net?DatabaseName=SampleDB
创建任务以部署文件夹
在“管道”选项卡中,单击“1 个作业,0 个任务”以添加任务 。
重复以下步骤创建命令任务,从“Tables”、“Functions”和“Policies”文件夹部署文件 :
在“任务”选项卡中,选择“代理作业”旁的 +,然后搜索“Azure 数据资源管理器”。
在“运行 Azure 数据资源管理器命令”下,选择“添加” 。
选择“Kusto 命令”,然后利用以下信息更新任务:
显示名称:任务的名称。 例如,
Deploy <FOLDER>
,其中<FOLDER>
是要创建的部署任务的文件夹的名称。文件路径:对于每个文件夹,请将路径指定为
*/<FOLDER>/*.csl
,其中<FOLDER>
是任务的相关文件夹。终结点 URL:指定上一步中创建的
EndPoint URL
变量。使用服务终结点:选择此选项。
服务终结点:选择现有的服务终结点或创建一个新的终结点(+ 新建),并在“添加 Azure 数据资源管理器服务连接”窗口中提供以下信息 :
设置 建议的值 连接名称 输入名称以标识此服务终结点 群集 URL 可在 Azure 门户中 Azure 数据资源管理器群集的概述部分查找值 服务主体 ID 输入创建为先决条件 (Microsoft Entra应用 ID) 服务主体应用密钥 输入创建为必备) Microsoft Entra应用密钥 ( Microsoft Entra租户 ID 输入Microsoft Entra租户 (,例如 microsoft.com 或 contoso.com)
选择“允许所有管道使用此连接”复选框,然后选择“确定” 。
选择“保存”,然后在“任务”选项卡中,验证是否有以下三个任务:“部署表”、“部署函数”和“部署策略” 。
创建查询任务
如果需要,请创建一个任务来对群集运行查询。 在生成或发布管道中运行查询可用于验证数据集,并根据查询结果执行成功或失败的步骤。 任务成功条件可以基于行计数阈值或单个值,具体取决于查询返回的结果。
在“任务”选项卡中,选择“代理作业”旁的 +,然后搜索“Azure 数据资源管理器”。
在“运行 Azure 数据资源管理器查询”下,选择“添加” 。
选择“Kusto 查询”,然后使用以下信息更新任务:
- 显示名称:任务的名称。 例如“查询群集”。
- 类型:选择“内联”。
- 查询:输入要运行的查询。
- 终结点 URL:指定之前创建的
EndPoint URL
变量。 - 使用服务终结点:选择此选项。
- 服务终结点:选择服务终结点。
在任务结果下,根据查询的结果选择任务的成功条件,如下所示:
如果查询返回行,请选择“行计数”并提供所需条件。
如果查询返回一个值,请选择“单个值”并提供预期结果。
创建查询服务器入口任务
如果需要,请创建一个任务来对群集运行查询,并对等待查询结果行计数的发布进度进行限制。 服务器查询入口任务是一个无代理作业,这意味着查询会直接在 Azure DevOps Server 上运行。
在“任务”选项卡中,选择“无代理作业”旁的 +,然后搜索“Azure 数据资源管理器”。
在“运行 Azure 数据资源管理器查询服务器入口”下,选择“添加” 。
选择“Kusto 查询服务器入口”,然后选择“服务器入口测试” 。
配置任务并提供以下信息:
- 显示名称:入口的名称。
- 服务终结点:选择服务终结点。
- 数据库名称:指定数据库名称。
- 类型:选择“内联查询”。
- 查询:输入要运行的查询。
- 最大阈值:指定查询成功条件的最大行数。
注意
运行发布时,应会看到如下所示的结果。
运行发布
选择“+ 发布”>“创建发布”以创建发布 。
在“日志”选项卡中,检查部署状态是否为“成功”。
至此已完成用于部署到预生产的发布管道的创建。
Yaml 管道配置
这些任务可以通过 Azure DevOps Web UI(如上所示)和管道架构中的 Yaml 代码来配置
管理员命令示例用法
steps:
- task: Azure-Kusto.PublishToADX.PublishToADX.PublishToADX@1
displayName: '<Task Name>'
inputs:
script: '<inline Script>'
waitForOperation: true
kustoUrls: '$(CONNECTIONSTRING):443?DatabaseName=""'
customAuth: true
connectedServiceName: '<Service Endpoint Name>'
serialDelay: 1000
continueOnError: true
condition: ne(variables['ProductVersion'], '') ## Custom condition Sample
查询示例用法
steps:
- task: Azure-Kusto.PublishToADX.ADXQuery.ADXQuery@1
displayName: '<Task Display Name>'
inputs:
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=<DataBaneName>'
customAuth: true
connectedServiceName: '<Service Endpoint Name>'
continueOnError: true
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈