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

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

本文介绍如何使用 Azure Pipelines 设置 CI/CD 管道,以便将应用程序部署到 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。

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

  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. 选择Project设置,然后选择“服务连接”。

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

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

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

  6. 环境中选择 Azure Stack

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

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

    Create a service connection for Azure Stack Hub

创建存储库并添加管道

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

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

  3. 选择Pipelines

  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:
    - master
    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 进行验证:

后续步骤