练习 - 设置 Azure DevOps 环境

已完成

在本部分中,你将介绍如何设置 Azure DevOps 组织并创建要部署到的 Azure 应用服务环境。

你将了解如何:

  • 设置 Azure DevOps 项目。
  • 使用 Azure Boards 管理工作项。
  • 创建 Azure 应用服务环境。
  • 在 Azure Pipelines 中创建管道变量。
  • 创建服务连接以向 Azure 订阅进行身份验证。

将用户添加到 Azure DevOps

若要完成本模块,需要自己的 Azure 订阅。 可以免费开始使用 Azure。

无需 Azure 订阅即可使用 Azure DevOps,但在本模块中,你将使用 Azure DevOps 部署到 Azure 资源。 若要简化此过程,请使用同一Microsoft帐户登录到 Azure 和 Azure DevOps。

如果使用不同的Microsoft帐户登录到 Azure 和 Azure DevOps,请在用于登录到 Azure 的 Microsoft 帐户下,将具有 基本 访问级别的用户添加到 DevOps 组织。 有关更多详细信息,请参阅 将用户添加到组织或项目

然后,注销 Azure DevOps 并使用用于登录到 Azure 订阅的同一帐户重新登录。

获取 Azure DevOps 项目

此时要确保 Azure DevOps 组织已设置好,可完成本模块的其余操作。 为此,你将运行一个模板,用于在 Azure DevOps 中创建项目。

此学习路径中的模块是循序渐进的。 你全程参与 Tailspin Web 团队的 DevOps 之旅。 出于学习目的,每个模块都有自己的 Azure DevOps 项目。

运行模板

运行一个模板来设置 Azure DevOps 组织。

  1. 在 Visual Studio 或所选的 IDE 中获取并运行 ADOGenerator 项目

  2. 当系统提示输入模板列表中的模板编号时,输入 39,以使用 Azure Pipelines 自动化 Docker 容器部署,然后按 Enter

  3. 选择身份验证方法。 可以 设置和使用个人访问令牌(PAT) 或使用设备登录。

    注释

    如果设置了 PAT,请确保授权必要的范围。 对于本模块,可以使用 完全访问权限,但在实际情况下,应确保仅授予必要的范围。

  4. 输入 Azure DevOps 组织名称,然后按 Enter

  5. 如果出现提示,请输入 Azure DevOps PAT,然后按 Enter

  6. 输入项目名称(如 Space Game - web - Docker),然后按 Enter

  7. 创建项目后,在浏览器中(at https://dev.azure.com/<your-organization-name>/)转到 Azure DevOps 组织并选择该项目。

为存储库创建分支

如果尚未创建,请创建 mslearn-tailspin-spacegame-web-docker 存储库的分支。

  1. 在 GitHub 上,转到 mslearn-tailspin-spacegame-web-docker 存储库。

  2. 选择屏幕右上角的 Fork

  3. 选择 GitHub 帐户作为“所有者”,然后选择“创建分支”。

重要

在本模块中,“ 清理 Azure DevOps 环境 ”页包含重要的清理步骤。 清理操作有助于确保免费生成分钟数不会耗尽。 即使未完成此模块,也务必要按照清理步骤操作。

设置项目的可见性

最初,GitHub 上 Space Game 存储库的分支设置为“公共”,而 Azure DevOps 模板创建的项目设置为“专用”。 GitHub 上的公共存储库可供任何人访问,而专用存储库仅供你和你选择与之共享的人员访问。 同样,在 Azure DevOps 上,公共项目为未经身份验证的用户提供只读访问权限,而专用项目要求授予用户访问权限并经过身份验证才能访问服务。

目前,出于本模块的目的,无需修改这些设置中的任何一个。 但是,对于个人项目,必须确定要授予其他人的可见性和访问权限。 例如,如果你的项目是开源的,你可能会选择将 GitHub 存储库和 Azure DevOps 项目都设为“公共”。 而如果你的项目是专有的,那么你通常会将 GitHub 存储库和 Azure DevOps 项目都设为“专用”。

稍后,你会发现以下资源有助于确定哪个选项最适合你的项目:

将工作项移动到“正在执行”状态

在这里,你将在 Azure Boards 上为自己分配工作项。 你还会将工作项移动到“正在执行”状态。 实际上,你和你的团队会在每个 冲刺或工作迭代开始时创建工作项。

此工作分配附带一份工作清单供您使用。 它使其他团队成员能够了解你正在处理的内容以及剩余的工作量。 工作项还有助于强制实施进行中的工作 (WIP) 限制,使团队一次不会负责太多工作。

在这里,你将将第一个项目“ 使用 Docker 创建容器版本的网站”移动到 “执行 ”列,然后将自己分配给工作项。

设置工作项:

  1. 从 Azure DevOps 导航到 Boards。 然后,从菜单中选择“Boards”

    Azure DevOps 的屏幕截图,其中显示了 Boards 菜单的位置。

  2. “使用 Docker 创建网站的容器版本”工作项中,选择卡片底部的向下箭头,然后将该工作项分配给自己。

    Azure Boards 的屏幕截图,其中显示了向下箭头的位置。

  3. 将工作项从“To Do”列移到“Doing”列

    Azure Boards 的屏幕截图,其中显示了“Doing”列中的卡片。

在本模块结束时,你将在完成任务后将卡片移动到 “完成 ”列。

创建 Azure 应用服务环境

“使用 Azure Pipelines 创建发布管道 ”模块中,你使用 Azure 门户创建了应用服务实例。 尽管门户是探索 Azure 产品/服务的绝佳工具,但设置应用服务等组件可能会变得繁琐。

在本模块中,你将使用 Azure CLI 启动部署和运行应用服务实例所需的资源。 可以从终端或通过 Visual Studio Code 访问 Azure CLI。

重要

必须拥有自己的 Azure 订阅才能完成本模块中的练习。

启动 Cloud Shell inn Azure 门户

  1. 访问 Azure 门户并登录。

  2. 从菜单栏中选择 Cloud Shell ,然后选择 Bash 体验。

    Azure 门户的屏幕截图,其中显示了 Cloud Shell 菜单项的位置。

    注释

    Cloud Shell 要求使用 Azure 存储资源来保存在 Cloud Shell 中创建的任何文件。 首次打开 Cloud Shell 时,系统将提示你创建资源组、存储帐户和 Azure 文件共享。 此设置会自动用于所有未来的 Cloud Shell 会话。

选择 Azure 区域

区域是位于特定地理位置内的一个或多个 Azure 数据中心。 美国东部、美国西部和北欧是一些区域示例。 每个 Azure 资源(例如应用服务实例)都分配给特定区域。

若要简化运行命令的过程,请首先选择默认区域。 指定默认区域后,除非显式指定了其他区域,否则后续命令将默认使用该区域。

  1. 运行以下命令,列出 Azure 订阅的可用区域。

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. 从输出中的 “名称 ”列中选择靠近你的位置的区域。 例如,可以选择 eastasiawestus2

  3. 运行以下命令以设置默认区域。 将占位符替换为所选区域的名称。

    az configure --defaults location=<REGION>
    

    此示例将 westus2 设置为默认区域:

    az configure --defaults location=westus2
    

创建 Bash 变量

在本部分中,你将创建 Bash 变量,使设置过程更加方便,并减少错误。 对共享文本字符串使用变量有助于避免意外拼写错误。

  1. 从 Cloud Shell 生成随机数。 这样,在下一步中,可以更轻松地为某些服务创建全局唯一的名称。

    resourceSuffix=$RANDOM
    
  2. 为应用服务 Web 应用和 Azure 容器注册表创建全局唯一的名称。 在这些命令中使用双引号会使 Bash 使用内联语法解析变量。

    webName="tailspin-space-game-web-${resourceSuffix}"
    registryName="tailspinspacegame${resourceSuffix}"
    
  3. 再创建两个 Bash 变量来存储资源组和应用服务计划的名称。

    rgName='tailspin-space-game-rg'
    planName='tailspin-space-game-asp'
    

创建 Azure 资源

注释

出于学习目的,你将在此处查看默认网络设置。 这些设置使您的网站可从 Internet 访问。 在实践中,可以配置一个 Azure 虚拟网络,将网站置于不可路由 Internet 的网络中,并且只有你和你的团队可以访问。 稍后,可以重新配置网络,使网站可供用户使用。

  1. az group create运行以下命令,使用前面定义的名称创建资源组。

    az group create --name $rgName
    
  2. az acr create运行以下命令,使用前面定义的名称创建 Azure 容器注册表。

    az acr create --name $registryName \
      --resource-group $rgName \
      --sku Standard \
      --admin-enabled true
    
  3. az appservice plan create运行以下命令,使用前面定义的名称创建应用服务计划。

    az appservice plan create \
      --name $planName \
      --resource-group $rgName \
      --sku B1 \
      --is-linux
    

    --sku 参数指定 B1 计划。 此计划在基本层上运行。 --is-linux 参数指示使用 Linux 辅助角色。

    重要

    如果 Azure 订阅中没有 B1 SKU, 请选择其他计划,例如 S1(标准)。

  4. az webapp create运行以下命令以创建应用服务实例。

    az webapp create \
      --name $webName \
      --resource-group $rgName \
      --plan $planName \
      --deployment-container-image-name $registryName.azurecr.io/web:latest
    
  5. az webapp list运行以下命令,列出应用服务实例的主机名和状态。

    az webapp list \
      --resource-group $rgName \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    

    记下正在运行的服务的主机名。 稍后在验证工作时需要用到它。 下面是一个示例:

    HostName                                        State
    ----------------------------------------------  -------
    tailspin-space-game-web-4692.azurewebsites.net  Running
    
  6. az acr list运行以下命令,列出 Azure 容器注册表实例的登录服务器。 稍后在创建管道变量时需要此服务器名称。

    az acr list \
      --resource-group $rgName \
      --query "[].{loginServer: loginServer}" \
      --output table
    

    记下登录服务器。 稍后在配置管道时需要用到它。 下面是一个示例:

    LoginServer
    ---------------------------------
    tailspinspacegame4692.azurecr.io    
    

重要

本模块中的 “清理 Azure DevOps 环境 ”页包含重要的清理步骤。 清理有助于确保在完成本模块后不会为 Azure 资源付费。 即使未完成此模块,也要务必执行清理步骤。

在 Azure Pipelines 中创建管道变量

使用 Azure Pipelines 创建发布管道时,向管道添加了一个变量,用于在应用服务中存储 Web 应用的名称。 你会在这里做同样的事。 此外,你将添加 Azure 容器注册表的名称。

可以在管道配置中硬编码这些名称,但如果将它们定义为变量,则配置将更具可重用性。 此外,如果实例名称发生更改,则可以更新变量并触发管道,而无需修改配置。

若要添加变量,请执行以下操作:

  1. 在 Azure DevOps 中,转到 Space Game - Web - Docker 项目。

  2. 在“Pipelines”下,选择“Library”。

    Azure Pipelines 的屏幕截图,其中显示了“库”菜单选项。

  3. 选择“+ Variable group”。

  4. 属性下,将变量组名称输入为 Release

  5. 在“变量”下,选择“+添加”。

  6. 对于变量的名称,请输入 WebAppName。 对于该值,请输入上面创建的应用服务实例的名称,例如 tailspin-space-game-web-4692

    重要

    设置应用服务实例的名称,而不是其主机名。 在此示例中,你将输入 tailspin-space-game-web-4692 ,而不是 tailspin-space-game-web-4692.azurewebsites.net

  7. 重复此过程,使用 Azure 容器注册表登录服务器的值(例如 tailspinspacegame4692.azurecr.io)添加名为 RegistryName 的另一个变量。

  8. 选择 管道权限,然后选择用于添加管道的 + 符号。 选择 mslearn-tailspin-spacegame-web-docker 以授予管道访问变量组的权限。

  9. 选择页面顶部的 “保存” 以保存变量。 变量组应如下所示:

    Azure Pipeline 屏幕截图显示变量组。该组包含两个变量。

创建所需的服务连接

在这里,你将创建一个服务连接,使 Azure Pipelines 能够访问 Azure 订阅。 Azure Pipelines 使用此服务连接将网站部署到应用服务。 在上一模块中创建了类似的服务连接。 还将创建 Docker 注册表连接,将容器发布到 Azure 容器注册表。

重要

确保在同一Microsoft帐户下登录到 Azure 门户和 Azure DevOps。

  1. 在 Azure DevOps 中,转到 Space Game - Web - Docker 项目。

  2. 从页面底部角,选择 “项目设置”。

  3. 在“管道”下,选择“服务连接”。

  4. 依次选择“ 新建服务连接”、“ Azure 资源管理器”、“ 下一步”。

  5. 在页面顶部附近,选择“服务主体(自动)”。 然后选择“ 下一步”。

  6. 填写以下字段:

    领域 价值
    范围级别 订阅
    订阅 你的 Azure 订阅
    资源组 tailspin-space-game-rg
    服务连接名称 资源管理器 - Tailspin - Space Game

    在此过程中,系统可能会提示你登录到Microsoft帐户。

  7. 确保选择 “授予对所有管道的访问权限 ”。

  8. 选择“ 保存”。

    Azure DevOps 执行测试连接,验证它是否可以连接到 Azure 订阅。 如果 Azure DevOps 无法连接,则可以再次登录。

  9. 选择 “新建服务连接”,然后选择“ Docker 注册表”,然后选择“ 下一步”。

  10. 在页面顶部附近,选择 Azure 容器注册表

  11. 填写以下字段:

    领域 价值
    订阅 你的 Azure 订阅
    Azure 容器注册表 选择之前创建的注册表
    服务连接名称 容器注册表连接
  12. 确保选择 “授予对所有管道的访问权限 ”。

  13. 完成时选择“保存”。