练习 - 设置 Azure DevOps 环境

已完成

在本单元中,你将确保 Azure DevOps 组织已设置为完成本模块的其余部分。 还将创建要部署到的 Azure 应用服务环境。

若要实现这些目标,你将:

  • 添加用户以确保 Azure DevOps 可以连接到 Azure 订阅。
  • 设置一个 Azure DevOps 项目供本模块使用。
  • 在 Azure Boards 中,将本模块的工作项移动到“Doing”列。
  • 确保你的项目是在本地设置的,以便可将更改推送到管道。
  • 使用 Azure Cloud Shell 中的 Azure CLI 创建 Azure 应用服务和 Azure Functions 应用。
  • 创建用于定义应用服务和 Azure Functions 实例名称的管道变量。
  • 创建一个服务连接,使 Azure Pipelines 能够安全地访问 Azure 订阅。

将用户添加到 Azure DevOps

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

尽管不需要 Azure 订阅即可使用 Azure DevOps,但本练习使用 Azure DevOps 部署到 Azure 订阅中的 Azure 资源。 若要简化此过程,请使用同一Microsoft帐户登录到 Azure 订阅和 Azure DevOps 组织。

重要

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

然后,注销 Azure DevOps 并使用新的用户帐户登录。 使用您用于登录 Azure 订阅的 Microsoft 帐户。

获取 Azure DevOps 项目

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

此学习路径中的模块形成一个循序渐进的学习过程,你将跟随 Tailspin 团队进行 DevOps 之旅。 出于学习目的,每个模块都有自己的 Azure DevOps 项目。

运行模板

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

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

  2. 当系统提示您 输入模板列表中的模板编号时,输入 38,以便使用 Azure Pipelines 自动化 Azure 函数部署,然后按 Enter

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

    注释

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

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

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

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

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

为存储库创建分支

如果未设置,创建 mslearn-tailspin-spacegame-web-azure-functions 存储库的分支。

  1. 在 GitHub 上,转到 mslearn-tailspin-spacegame-web-azure-functions 代码库。

  2. 选择屏幕右上角的“分支”

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

重要

本模块中的 “清理 Azure DevOps 环境 ”页包含必须完成 的重要步骤 ,即使未完成此模块也是如此。 清理有助于确保您的免费构建时间不会耗尽。

设置项目的可见性

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

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

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

分配工作项并将其移动到“正在执行”状态

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

本练习将创建一个用于工作的清单。 它使其他团队成员能够了解你正在处理的内容以及剩余的工作量。 工作项还有助于强制实施进行中的工作 (WIP) 限制,使团队一次不会负责太多工作。

  1. 在 Azure DevOps 中,导航到 Boards 类别,然后从菜单中选择 Boards

    Azure DevOps 显示 Boards 菜单的位置。

  2. 通过选择标题打开“以 Azure Function 工作项方式打开重构排行榜 API”。 将此工作项分配给自己,然后选择“ 保存并关闭”。

  3. 选择卡片底部的向下箭头,然后选择“正在执行”或选择卡片并将其拖动到“正在执行”列

    工作项卡片的屏幕截图,其中突出显示了向下箭头的位置。

  4. 工作项从“To Do”列移动到“进行中”列。

    Azure Boards 的屏幕截图,其中突出显示了“正在执行”列中的工作项卡片。

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

创建 Azure 应用服务和 Azure Functions 环境

在这里,你将创建部署站点和 API 新版本所需的应用服务和 Azure Functions 应用。

“使用 Azure Pipelines Learn 创建发布管道 ”模块中,通过 Azure 门户启动应用服务。 尽管门户是探索 Azure 上提供的内容或执行基本任务的好方法,但启动应用服务等组件可能很繁琐。

在本模块中,你将使用 Azure CLI 启动应用服务实例。 可以从终端或通过 Visual Studio Code 访问 Azure CLI。 在这里,我们将从 Azure Cloud Shell 访问 Azure CLI。 此基于浏览器的 shell 体验托管在云中。 在 Cloud Shell 中,Azure CLI 配置为与你的 Azure 订阅配合使用。

重要

需要自己的 Azure 订阅才能完成本模块中的练习。

通过 Azure 门户启动 Cloud Shell

  1. 登录到 Azure 门户

  2. 在页眉中的全局控件中,选择 Cloud Shell

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

    终端随即打开并连接到 Azure Cloud Shell。

  3. 如有必要,请从终端菜单中选择 Bash

    注释

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

选择 Azure 区域

区域是地理位置中的一个或多个 Azure 数据中心。 美国东部、美国西部和北欧是区域示例。 为每个 Azure 资源(包括应用服务实例)分配一个区域。

若要使命令更易于运行,让我们首先设置默认区域。 指定默认区域后,输入的命令将使用该区域,直到指定其他区域。

  1. 在 Cloud Shell 中运行以下命令 az account list-locations ,列出 Azure 订阅中可用的区域:

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

  3. 运行 az configure 以设置默认区域。 将 <REGION> 替换为你选择的区域的名称。

    az configure --defaults ___location=<REGION>
    

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

    az configure --defaults ___location=westus2
    

创建 Bash 变量

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

  1. 从 Cloud Shell 生成一个随机数,我们将在下一步中为某些服务创建全局唯一的名称。

    resourceSuffix=$RANDOM
    
  2. 为应用服务、Azure 函数和存储帐户创建三个全局唯一的名称。 这些命令使用双引号,指示 Bash 使用内联语法解析变量。

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

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

创建所需的 Azure 资源

我们的解决方案需要多个 Azure 资源进行部署,现在我们将创建这些资源。

注释

本练习使用默认网络设置,以便可从 Internet 访问站点。 实际上,可以将 Azure 虚拟网络配置为将网站置于只有你和团队可以访问的网络中。 稍后,可以重新配置虚拟网络,使网站可供用户使用。

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

    az group create --name $rgName
    
  2. az appservice plan create运行以下命令,使用上一任务中定义的名称创建应用服务计划:

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

    参数 --sku 指定 B1 计划。 此计划在基本层上运行。 该 --is-linux 参数指定 Linux 工作线程(用于事件和任务调度的线程)。

    重要

    如果 B1 SKU 在你的 Azure 订阅中不可用,那么请选择其他计划,例如 S1(标准)。

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

    az webapp create \
      --name $webName \
      --resource-group $rgName \
      --plan $planName \
      --runtime "DOTNETCORE|6.0"
    
  4. Azure Functions 需要存储帐户进行部署。 az storage account create运行以下命令来创建它:

    az storage account create \
      --name $storageName \
      --resource-group $rgName \
      --sku Standard_LRS
    
  5. az functionapp create运行以下命令以创建 Azure Functions 应用实例。 将其 <region> 替换为首选区域。

    az functionapp create \
      --name $leaderboardName \
      --resource-group $rgName \
      --storage-account $storageName \
      --functions-version 4 \
      --consumption-plan-___location <region>
    
  6. az webapp list运行以下命令列出应用服务实例的主机名和状态:

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

    记下正在运行的服务的主机名。 它应如下所示,但随机数标识符将有所不同。 稍后验证工作时,将需要 Web 主机名。

    HostName                                        State
    ----------------------------------------------  -------
    tailspin-space-game-web-4692.azurewebsites.net  Running
    
  7. az functionapp list运行以下命令,列出 Azure Functions 实例的主机名和状态。

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

    记下正在运行的服务的主机名。 它应如下所示,但随机数标识符将有所不同。 稍后在验证工作时,需要用到该排行榜主机名。

    HostName                                                State
    ------------------------------------------------------  -------
    tailspin-space-game-leaderboard-4692.azurewebsites.net  Running
    
  8. 将这两个主机名复制到稍后可以轻松访问的位置。

  9. 作为可选步骤,打开浏览器并输入主机名以验证它是否正在运行。 将显示默认主页。

重要

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

在 Azure Pipelines 中创建管道变量

“使用 Azure Pipelines 创建发布管道 ”模块中,向管道添加了一个变量,用于在应用服务中存储 Web 应用的名称。 在这里,你将做同样的事。 此外,还将为 Azure Functions 实例添加排行榜应用的名称。

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

让我们向项目添加一个变量组。

  1. Space Game - Web - Azure Functions 项目应在 Azure DevOps 中打开。

  2. 在菜单中,选择 “管道”,然后在 “管道 ”下选择 “库”。 此时将显示“库”窗格。

    Azure DevOps 菜单的屏幕截图,其中突出显示了“管道”下的“库”选项。

  3. 在命令栏或窗格中间,选择 “变量”组。 此时会显示 “新建变量组 ”页。

  4. 对于变量组名称,请输入 Release

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

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

    重要

    设置应用服务实例的名称,而不是其完整主机名。 在本练习中, tailspin-space-game-web-4692 是主机名 tailspin-space-game-web-4692.azurewebsites.net 的实例部分。

  7. 添加名为 LeaderboardAppName 的另一个变量,其中包含排行榜实例的值,例如 tailspin-space-game-leaderboard-4692

  8. 请添加一个名为 ResourceGroupName、值为 tailspin-space-game-rg 的最终变量。

  9. 在页面顶部附近的命令栏中,选择“ 保存”发布 变量组保存到管道。

    变量组中的变量应类似:

    Azure Pipelines 的屏幕截图,其中显示了变量组。该组包含三个变量。

创建峰值环境

在前面的模块中,你为开发测试和过渡环境创建了环境。 在这里,你将做同样的事。 这次,你将创建一个名为 峰值的环境。

  1. 在 Azure DevOps 菜单中的 “管道”下,选择“ 环境”。

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

  2. 选择“创建环境”。 此时会显示 “新建环境 ”窗格。

  3. 对于 “名称”,请输入 峰值

  4. 将其余字段保留为默认值。

  5. 选择 创建

创建服务连接

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

重要

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

  1. 在 Azure DevOps 中, 空间游戏 - Web - Azure Functions 管道项目,在菜单下方选择 “项目设置”。 此时会显示 “项目详细信息 ”窗格。

  2. 在菜单中的 “管道”下,选择 “服务连接”。

  3. “服务连接 ”页上,选择“ 新建服务连接”,然后在“ 新建服务连接 ”窗格中,选择 “Azure 资源管理器”,然后选择“ 下一步”。

  4. 在“ 新建服务连接 ”窗格中,选择 “服务主体”(自动),然后选择“ 下一步”。

  5. “新建 Azure 服务连接 ”窗格中,选择或输入以下设置:

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

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

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

  7. 选择“保存”

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