使用 Azure Pipelines 部署到 Azure Stack Hub 应用服务

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

本文将引导你设置 CI/CD 管道,以便使用 Azure Pipelines 将应用程序部署到 Azure Stack Hub 实例中的应用服务。

在本文中,可以了解如何创建或验证:

  • Azure Stack Hub 服务主体 (SPN) 管道的凭据。
  • Azure Stack Hub 实例中的 Web 应用。
  • 与 Azure Stack Hub 实例的服务连接。
  • 包含要部署到应用的应用代码的存储库

先决条件

创建或验证 SPN

SPN 提供基于角色的凭据,以便 Azure 外部的进程可以连接到资源并与之交互。 需要具有参与者访问权限的 SPN,以及这些说明中指定的属性才能与 Azure DevOps 管道一起使用。

作为 Azure Stack Hub 的用户,你没有创建 SPN 的权限。 需要向云操作员请求此主体。 此处提供了相关说明,以便如果你是云操作员,则可以创建 SPN;如果你是云操作员提供的工作流中使用 SPN 的开发人员,则可以验证 SPN。

云操作员需要使用 Azure CLI 创建 SPN。

以下代码片段是使用 PowerShell 提示符和 适用于 Azure Stack Hub 的 Azure CLI 为 Windows 计算机编写的。 如果在 Linux 计算机上使用 CLI 并 bash,请删除行扩展或将其 \替换为 。

  1. 准备用于创建 SPN 的以下参数的值:

    参数 示例 说明
    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 要用于此云的配置文件。
  2. 打开你的命令行工具(例如 Windows PowerShell 或 Bash)并登录。 使用以下命令:

    az login
    
  3. register对于新环境,请使用 命令;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
    
  4. 获取要用于 SPN 的订阅 ID 和资源组。

  5. 通过以下命令使用订阅 ID 和资源组创建 SPN:

    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
    
  6. 检查生成的 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 应用目标

  1. 登录到 Azure Stack Hub 门户。
  2. 选择“创建资源”>“Web + 移动”>“Web 应用”。
  3. 选择订阅
  4. 创建或选择资源组。
  5. 键入应用的名称。 应用的名称将显示在应用的 URL 中,例如 yourappname.appservice.<region>.<FQDN>
  6. 为应用选择运行时堆栈。 运行时必须与计划用于 Web 应用的代码匹配。
  7. 选择将托管运行时和应用的操作系统 (OS)。
  8. 为 Azure Stack Hub 实例选择或键入区域。
  9. 根据 Azure Stack Hub 实例、区域和应用 OS 选择计划。
  10. 选择“查看 + 创建” 。
  11. 查看 Web 应用。 选择“创建”。
  12. 选择“转到资源”。
  13. 记下应用名称。 将名称添加到存储库中定义管道的 yml 文档。

创建服务连接

创建服务连接。 需要 SPN 中的值和 Azure Stack Hub 订阅的名称。

  1. 登录到 Azure DevOps 组织,然后导航到项目。

  2. 选择“项目设置”,然后选择“服务连接”。

  3. 选择“ 服务连接>”“新建服务连接”。

  4. 选择“Azure 资源管理器”,然后选择“下一步”。

  5. (手动) 选择“服务主体”。

  6. “环境”中选择“Azure Stack”。

  7. 填写表单,然后选择“ 验证并保存”。

  8. 为服务连接命名。 (需要服务连接名称才能创建 yaml 管道) 。

    为 Azure Stack Hub 创建服务连接

创建存储库并添加管道

  1. 如果尚未将 Web 应用代码添加到存储库,请立即添加它。

  2. 打开存储库。 选择存储库,然后选择“ 浏览”。

  3. 选择 管道

  4. 选择“新建管道”。

  5. 选择“Azure Repos Git”。

  6. 选择存储库。

  7. 选择“初学者管道”。

  8. 导航回存储库并打开 azure-pipelines.yml

  9. 添加以下 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 ,如以下示例所示。

  10. 使用 azureSubscription 服务连接的名称更新值。

  11. appName使用应用名称更新 。 现在可以开始部署了。

有关将 Azure 任务与 Azure Stack Hub 配合使用的说明

以下 Azure 任务通过 Azure Stack Hub 进行验证:

后续步骤