Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
本文逐步讲解如何使用 Azure Pipelines 设置 CI/CD 管道,以便将应用程序部署到 Azure Stack Hub 实例中的应用服务。
本文介绍如何创建或验证:
- 管道的 Azure Stack Hub 服务主体(SPN)凭据。
 - Azure Stack Hub 实例中的 Web 应用。
 - 与 Azure Stack Hub 实例的服务连接。
 - 包含要部署到应用的应用代码的存储库
 
先决条件
- 访问启用了应用服务 RP 的 Azure Stack Hub 实例。
 - 与 Azure Stack Hub 租户关联的 Azure DevOps 解决方案 。
 
创建或验证 SPN
SPN 提供基于角色的凭据,以便 Azure 外部的进程可以连接到资源并与之交互。 需要具有参与者访问权限的 SPN 以及这些说明中指定的属性才能用于 Azure DevOps 管道。
作为 Azure Stack Hub 的用户,你无权创建 SPN。 需要从云操作员请求此主体。 此处提供了这些说明,因此,如果你是云操作员,则可以创建 SPN,或者如果你是云操作员提供的工作流中使用 SPN 的开发人员,则可以验证 SPN。
云操作员需要使用 Azure CLI 创建 SPN。
以下代码片段是使用适用于 Azure Stack Hub 的 Azure CLI 的 PowerShell 提示符为 Windows 计算机编写的。 如果在 Linux 计算机上使用 CLI 并 bash,请删除该行扩展或将其替换为 a \。
准备用于创建 SPN 的以下参数的值:
参数 Example Description endpoint-resource-manager “https://management.orlando.azurestack.corp.microsoft.com" 资源管理终结点。 suffix-storage-endpoint “orlando.azurestack.corp.microsoft.com” 存储帐户的终结点后缀。 suffix-keyvault-dns “.vault.orlando.azurestack.corp.microsoft.com” Key Vault 服务 dns 后缀。 endpoint-active-directory-graph-resource-id “https://graph.windows.net/" Active Directory 资源 ID。 endpoint-sql-management https://notsupported sql server 管理终结点。 将此设置为 https://notsupported个人资料 2019-03-01-hybrid 要用于此云的配置文件。 打开命令行工具,例如 Windows PowerShell 或 Bash 并登录。 使用以下命令:
az loginregister如果使用的是现有环境,update请使用新环境或命令。 使用以下命令。az cloud register ` -n "AzureStackUser" ` --endpoint-resource-manager "https://management.<local>.<FQDN>" ` --suffix-storage-endpoint ".<local>.<FQDN>" ` --suffix-keyvault-dns ".vault.<local>.<FQDN>" ` --endpoint-active-directory-graph-resource-id "https://graph.windows.net/" ` --endpoint-sql-management https://notsupported ` --profile 2019-03-01-hybrid获取要用于 SPN 的订阅 ID 和资源组。
使用以下命令创建 SPN,其中包含订阅 ID 和资源组:
az ad sp create-for-rbac --name "myApp" --role contributor ` --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} ` --sdk-auth如果没有云操作员权限,还可以使用云操作员提供的 SPN 登录。 需要客户端 ID、机密和租户 ID。 使用这些值,可以使用以下 Azure CLI 命令创建包含创建服务连接所需的值的 JSON 对象。
az login --service-principal -u "<client-id>" -p "<secret>" --tenant "<tenant-ID>" --allow-no-subscriptions az account show检查生成的 JSON 对象。 你将使用 JSON 对象创建服务连接。 JSON 对象应具有以下属性:
{ "environmentName": "<Environment name>", "homeTenantId": "<Tenant ID for the SPN>", "id": "<Application ID for the SPN>", "isDefault": true, "managedByTenants": [], "name": "<Tenant name>", "state": "Enabled", "tenantId": "<Tenant ID for the SPN>", "user": { "name": "<User email address>", "type": "user" } }
创建 Web 应用目标
- 登录到 Azure Stack Hub 门户。
 - 选择“创建资源”“Web + 移动”>“Web 应用”。
 - 选择 订阅。
 - 创建或选择 资源组。
 - 键入应用 的名称 。 应用的名称将显示在应用的 URL 中,例如 
yourappname.appservice.<region>.<FQDN> - 为应用选择 运行时堆栈 。 运行时必须与计划用于 Web 应用的代码匹配。
 - 选择将托管运行时和应用的 作系统 (OS)。
 - 选择或键入 Azure Stack Hub 实例 的区域 。
 - 根据 Azure Stack Hub 实例、区域和应用 OS 选择计划。
 - 选择 审阅 + 创建。
 - 查看 Web 应用。 选择 创建。
 - 选择 转到资源。
 - 记下应用名称。 你将将名称添加到 yml 文档,该文档定义存储库中的管道。
 
创建服务连接
创建服务连接。 需要 SPN 中的值和 Azure Stack Hub 订阅的名称。
登录到 Azure DevOps 组织,然后导航到项目。
选择 “项目设置”,然后选择“ 服务连接”。
选择 “服务连接>新建服务连接”。
选择 Azure 资源管理器,然后选择“ 下一步”。
选择“服务主体”(手动)。
从环境中选择 Azure Stack。
填写表单,然后选择“ 验证并保存”。
为服务连接命名。 (需要服务连接名称才能创建 yaml 管道)。
              
              
            
创建存储库并添加管道
如果尚未将 Web 应用代码添加到存储库,请立即添加它。
打开存储库。 选择存储库,然后选择“ 浏览”。
选择 管道
选择 “新建管道”。
选择 Azure Repos Git。
选择存储库。
选择 “初学者”管道。
导航回存储库并打开
azure-pipelines.yml。添加以下 yaml:
# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml trigger: - main variables: azureSubscription: '<your connection name>' VSTS_ARM_REST_IGNORE_SSL_ERRORS: true steps: - task: AzureWebApp@1 displayName: Azure Web App Deploy inputs: azureSubscription: $(azureSubscription) appName: <your-app-name> package: '$(System.DefaultWorkingDirectory)'注释
若要忽略 SSL 错误,请设置一
VSTS_ARM_REST_IGNORE_SSL_ERRORS个名为生成或发布管道中的值的true变量,如以下示例所示。使用
azureSubscription服务连接的名称更新值。使用
appName应用名称更新。 现在可以部署了。
有关将 Azure 任务与 Azure Stack Hub 配合使用的说明
以下 Azure 任务使用 Azure Stack Hub 进行验证: