Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
在早期版本的 Azure Pipelines 中,将应用程序部署到多个服务器需要大量的规划和维护。 必须手动启用 Windows PowerShell 远程处理,需要打开特定的端口,并且必须在每台服务器上安装部署代理。 管理推出部署也需要手动干预。 通过引入 部署组,这些挑战大大简化了。
部署组在组中的每个目标服务器上安装部署代理,并使发布管道能够在这些服务器上逐步部署应用程序。 可以为推出部署创建多个管道,从而允许分阶段将应用程序更新传送到不同的用户组。
注释
经典管道中使用部署组。 如果使用 YAML 管道,请参阅 “环境”。
先决条件
| 产品 | 要求 |
|---|---|
| Azure DevOps | - 一个 Azure DevOps 组织。 - Azure DevOps 项目。 |
| Azure DevOps 演示生成器 |
-
设置演示生成器。 - 创建新的 Azure DevOps 项目 ,并确保选择 DeploymentGroups 模板(列表中的数字 15)。 |
| Azure | - Azure 订阅。 |
在 Azure 中设置资源
本部分介绍如何使用 ARM 模板设置 Azure 资源。 它预配了六台虚拟机(VM)Web 服务器,其中配置了 IIS、SQL Server VM(DB 服务器)、Azure 负载均衡器和所有必要的网络连接。
填写所需的信息,然后选择“ 查看 + 创建”。 可以使用任何允许的用户名和密码组合,因为它们不会在本教程中再次使用。 Env 前缀名称将添加到所有资源名称,以确保全局唯一性。 使用个人或随机内容。 如果在验证或创建过程中遇到命名冲突,请尝试更改此值并重新部署。 预配通常需要 10-15 分钟。
验证完成后,选择“ 创建 ”以部署资源。
部署完成后,转到 Azure 门户中的资源组,查看生成的资源。 选择名称中带有 sqlSrv 的 DB 服务器 VM 以查看其详细信息。
复制 DNS 名称, 因为稍后的步骤需要它。
创建部署组
部署组是一组计算机,每个计算机都安装了部署代理。 这些计算机与 Azure Pipelines 通信,以协调应用程序部署。
导航到之前使用演示生成器创建的 Azure DevOps 项目。
选择 管道>部署组。
选择 “添加部署组”。
输入 “发布 ”作为 部署组名称,然后选择“ 创建”。 将生成注册脚本。 可以使用此脚本注册目标服务器并手动安装部署代理。 但是,在本教程中,目标服务器会自动注册为发布管道的一部分。
创建个人访问令牌
在 Azure DevOps 项目中,选择 “用户设置” 图标,然后选择 “个人访问令牌”。
选择 “新建令牌”,输入 PAT 的名称,然后选择到期日期。
选择自定义定义的范围,选择“显示所有作用域”,然后检查以下范围:
- 项目和团队 ->读取和写入。
- 代理池 ->读取和管理
- 部署组 ->读取和管理。
完成后,选择“创建”,并复制你的 PAT,因为你在下一部分中将需要它。
配置发布管道
经典发布管道模板包括一个代理作业( 代理阶段),该作业在代理池中的代理上运行任务。 它还包括两个部署组作业: 部署组阶段 和 IIS 部署阶段。 部署组作业在部署组中定义的计算机上运行任务。 请按照以下步骤配置每个任务。
配置代理作业
导航到 Azure DevOps 项目并选择 “Pipelines>发布”。
选择 部署组 版本定义,然后选择“ 编辑”。
选择“ 任务 ”选项卡以查看管道中的部署任务。
选择 代理阶段 阶段,然后选择 Azure Pipelines 池和 Windows 最新 规范。
选择 Azure 资源组部署 任务,选择之前用于创建资源的 Azure 订阅 ,然后选择 “授权 ”以授权连接。 授权后,选择为本教程创建的 资源组 。
此任务将在 Azure 中的虚拟机上运行,必须能够回连到流水线以满足部署组的要求。 若要保护连接,必须使用之前创建的个人访问令牌(PAT)设置服务连接。 在同一任务中向下滚动,然后在 Azure Pipelines 服务连接下选择“新建”。
在“新建服务连接”面板中,输入 Azure DevOps 组织的
https://dev.azure.com/organizationName”。 粘贴您之前创建的 个人访问令牌,指定 服务连接名称,并选中 授予对所有流水线的访问权限 框。 完成操作后,选择验证并保存。
向下滚动到 Azure 资源组部署 任务,然后从 团队项目 和之前创建的 部署组 的下拉菜单中进行选择。
配置部署组任务
从 部署组 发布定义中,选择 部署组阶段 作业。 此作业在部署组中定义的计算机上执行任务。 此作业使用 SQL-Svr-DB 标记部署到部署组中的目标子集。 在 “部署组 ”下拉列表下,选择之前创建的 发布 部署组。
选择 IIS 部署阶段 作业。 此作业使用 WebSrv 标记将 Web 应用程序部署到 Web 服务器的子集。 从下拉列表中选择之前创建的 部署组 。
断开 Azure 网络负载均衡器 和 连接 Azure 网络负载均衡器 任务已弃用。 可以通过右键单击任务并选择“ 禁用选择任务”来暂时禁用它们。
IIS Web 应用管理和IIS Web 应用部署任务已预先填充,无需进行任何更改。
从左上角选择“ 变量 ”选项卡,选择 “管道变量”,并提供以下值。 将 DefaultConnectionString 变量中的占位符替换为之前复制的 SQL Server DNS 名称:
变量名称 变量值 数据库名称 PartsUnlimited-Dev DBPassword xxxxxxxx DBUserName xxxxxxxx 默认连接字符串 数据源=[YOUR_DNS_NAME];初始目录=PartsUnlimited-Dev;用户ID=xxxxxxxx;密码=xxxxxxxx;MultipleActiveResultSets=False;连接超时=30; 服务器名称 localhost 选择“ 保存”,根据需要添加注释,然后选择“ 确定”。
小窍门
如果收到 DefaultConnectionString 变量必须保存为机密的错误,请选择其值旁边的挂锁图标来保护它。
创建发布和部署应用程序
配置并保存发布定义后,可以继续创建发布以将 Web 应用部署到 Azure。 但是,在开始发布之前,必须确保生成管道至少运行一次。 这会生成部署所需的流水线工件。 如果在生成管道之前尝试运行发布管道,发布面板中的 “项目 ”部分将为空。 按照以下步骤运行您的管道,生成管道工件,然后创建新的发布版本:
在 Azure DevOps 项目中,选择 “管道”,然后选择 “部署组 生成管道”。
选择“运行管道”。 在管道运行面板中,选择 代理规范,然后选择“ 运行”。
管道成功完成后,它将生成管道工件。 可以从管道摘要窗口查看它:
现在转到 Pipelines>Release,选择发布定义,然后选择“ 创建发布 ”以启动部署管道。
完成后,选择“ 创建 ”,然后选择管道运行以打开概述。 您应该会看到您的管道正在进行。 单击该阶段以查看详细的部署日志。
在摘要窗口中,可以看到部署的每个阶段的状态:
故障排除
- 无法连接到主服务器或目标服务器或A 连接已成功与服务器建立连接,但在登录过程中发生错误。
如果在运行 Sql Dacpac 部署计算机组 任务时遇到以下任一错误,请执行以下步骤:
- 验证数据库:
确保在资源部署期间成功创建数据库。 可以使用 Azure CLI 或 sqlcmd 确认这一点:
sqlcmd -S <server-name> -U <username> -P <password> -Q "SELECT name FROM sys.databases"
如果列表中不存在数据库,可以使用以下命令创建新的数据库:
sqlcmd -S <server-name> -U <username> -P <password> -Q "CREATE DATABASE [YourDatabaseName]"
- 验证 SQL Server 身份验证:
确保启用了 SQL Server 身份验证,必须将 SQL Server 配置为允许 SQL 和 Windows 身份验证(混合模式)。 启用此功能:
a。 使用 SSMS 或 sqlcmd 进行连接
b. 运行以下查询:
EXEC xp_instance_regwrite
N'HKEY_LOCAL_MACHINE',
N'Software\\Microsoft\\MSSQLServer\\MSSQLServer',
N'LoginMode',
REG_DWORD,
2;
选项c. 重启 SQL Server 服务,使更改生效:
net stop MSSQLSERVER
net start MSSQLSERVER
- 即使代理在 VM 上运行,我的某些代理也处于脱机状态
如果一个或多个客服人员显示为脱机,可以尝试一些措施。 首先,登录到运行代理的 VM,并运行以下命令来检查 VM 是否解析为同一组 IP。
nslookup dev.azure.com
如果所有 VM 都解析为同一组 IP,请确保使用正确的出站规则配置负载均衡器。 可以将后端池添加到 Azure 中的负载均衡器,将 VM 的 NIC 添加到后端池,然后将其与负载均衡器的出站规则相关联。 为此,请按以下步骤操作:
导航到 Azure 并找到负载均衡器。
选择 后端池,选择现有池或创建新的池,并在 IP 配置下添加 Web 服务器。
转到 负载均衡规则,选择负载均衡规则,然后从 “后端池 ”下拉列表中选择后端池。
清理资源
本教程创建了 Azure DevOps 项目并在 Azure 中部署了资源。 如果不再需要它们,请按照以下步骤进行清理:
删除 Azure DevOps 项目:导航到 项目设置>“概述>删除”。
删除本教程期间创建的所有 Azure 资源都放置在同一资源组中。 删除资源组将删除所有关联的资源。 可以通过 Azure 门户或 CLI 执行此作:
Azure CLI
az group delete --name <RESOURCE_GROUP_NAME> --yes --no-waitAzure 门户
导航到 Azure 门户 >资源组。
选择本教程中使用的资源组。
选择 “删除资源组”,确认名称,然后选择“ 删除”。