练习 - 设置 Azure DevOps 环境

已完成

在本部分中,需确保 Azure DevOps 组织已设置好,可完成本模块的其余操作。 还需创建以后部署到的 Azure 应用服务环境。

若要实现这些目标,需要:

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

向 Azure DevOps 添加用户

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

无需 Azure 订阅即可使用 Azure DevOps,但在这里,请使用 Azure DevOps 来部署到 Azure 订阅中存在的 Azure 资源。 为了简化操作流程,请使用相同的 Microsoft 帐户登录 Azure 订阅和 Azure DevOps 组织。

如果你使用不同的 Microsoft 帐户登录 Azure 和 Azure DevOps,请在你用于登录 Azure 的 Microsoft 帐户下,向你的 DevOps 组织添加一名用户。 有关详细信息,请查看向组织或项目添加用户。 添加用户时,请选择“基本”访问级别。

接下来,注销 Azure DevOps 并登录。 使用用于登录到 Azure 订阅的 Microsoft 帐户。

获取 Azure DevOps 项目

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

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

运行模板

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

在 Azure DevOps 演示生成器网站上,若要运行模板,请按照下列步骤操作。

  1. 选择“登录”并接受使用条款。

  2. 在“新建项目”页面上,选择 Azure DevOps 组织。 输入项目名称,例如“Space Game - Web - 多阶段”。

    A screenshot of the Azure DevOps Demo Generator showing the process for creating the project.

  3. 选择“Yes, I want to fork this repository”>“Authorize”。

    如果出现相关窗口,请授权访问你的 GitHub 帐户。

    重要

    需要选择此选项,模板才能连接到 GitHub 存储库。 即使已为 Space Game 网站项目创建分支,也请选中此选项。 该模板使用现有分支。

  4. 选择“创建项目”。

    模板需要一些时间来运行。

  5. 选择“Navigate to project”,转到你在 Azure DevOps 中的项目。

重要

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

设置项目的可见性

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

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

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

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

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

这种工作分配会为你提供一个工作清单。 通过工作清单,其他团队成员可以知道你的当前工作内容和剩余工作量。 工作项还有助于强制实施进行中的工作 (WIP) 限制,使团队一次不会负责太多工作。

回想一下,对于当前冲刺 (sprint),团队已处理了以下主要问题。

A screenshot of Azure Boards showing the five tasks for this sprint.

注意

在 Azure DevOps 组织中,工作项是按顺序编号的。 在你的项目中,每个工作项的编号可能与你在这里看到的不同。

在此处,将第一项“创建多阶段管道”移到“正在执行”列中。 然后,你要将你自己分配至该工作项。 “创建多阶段管道”与定义部署 Space Game 网站的每个阶段相关。

设置工作项:

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

    A screenshot of Azure DevOps showing the location of the Boards menu.

  2. 在“创建多阶段管道”卡片中,选择向下箭头。 然后将工作项分配给自己。

    Screenshot of Azure Boards showing the location of the down arrow.

  3. 将工作项从“待办”列移到“正在执行”列。

    A screenshot of Azure Boards showing the card in the Doing column.

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

在本地设置项目

在这里,你要在 Visual Studio Code 中加载 Space Game 项目,配置 Git,本地克隆存储库并设置上游远程库,以便可下载起始代码。

注意

如果你已在本地设置有 mslearn-tailspin-spacegame-web-deploy 项目,可移到下一部分。

打开集成终端

Visual Studio Code 附带了一个集成终端。 在此处编辑文件,从命令行执行操作。

  1. 启动 Visual Studio Code。

  2. 在“视图”菜单中选择“终端”。

  3. 在下拉列表中,选择“Git Bash”。 如果你熟悉其他想用的 Unix shell,请改为选择该 shell。

    A screenshot of Visual Studio Code showing the location of the Git Bash shell.

    在终端窗口中,可选择系统中安装的任何 shell。 例如,可以选择 Git Bash、PowerShell 或其他 shell。

    在这里,你将使用 Git Bash,它是 Windows 版 Git 的一部分,可以让你轻松运行 Git 命令。

    注意

    如果未在 Windows 上看到“Git Bash”选项,请确保已安装 Git,然后重启 Visual Studio Code。

  4. 运行 cd 命令,以转到要执行操作的目录。 选择主目录 (~) 或其他目录(如果需要)。

    cd ~
    

配置 Git

如果刚接触 Git 和 GitHub,请先运行一些命令,将你的标识与 Git 相关联并在 GitHub 中进行身份验证。 有关详细信息,请查看设置 Git

至少需要完成以下步骤。 从集成终端运行命令。

  1. 设置用户名
  2. 设置提交电子邮件地址
  3. 缓存 GitHub 密码

注意

如果已对 GitHub 使用双因素身份验证,请创建个人访问令牌。 出现提示时,使用令牌代替密码。

将访问令牌看做是密码。 请将其保存在安全的位置。

在 Visual Studio Code 中设置项目

使用 Azure DevOps 构建应用程序学习路径中,可对 Git 存储库创建分支,然后进行克隆。 该存储库中有 Space Game 网站的源代码。 你的分支已连接到 Azure DevOps 中的项目,因此在将更改推送到 GitHub 时会运行生成。

重要

在此学习路径下,我们切换到另一个 Git 存储库:mslearn-tailspin-spacegame-web-deploy。 在你运行模板来设置 Azure DevOps 项目时,该过程已自动为存储库设置了分支。

在此部分中,你在本地克隆分支,因此你可更改和生成管道配置。

在本地克隆分支

现在,GitHub 帐户中拥有一个 Space Game Web 项目的副本。 现在,你将副本下载或克隆到计算机,以便能够使用它。

克隆与分支类似,都是存储库的副本。 克隆存储库时,可执行更改,验证它们是否按预期工作,然后将这些更改上传到 GitHub。 还可将其他经过身份验证的用户对 GitHub 的存储库副本所做的更改同步到本地副本。

将 Space Game Web 项目克隆到计算机

  1. GitHub 上转到 Space Game Web 项目的分支 (mslearn-tailspin-spacegame-web-deploy)。

  2. 选择“代码”。 然后从“HTTPS”选项卡选择显示的 URL 旁边的按钮,将该 URL 复制到剪贴板。

    Screenshot that shows how to locate the URL and copy button from the GitHub repository.

  3. 在 Visual Studio Code 中,转到终端窗口。

  4. 在终端中,转到要在其中操作的目录。 选择主目录 (~) 或其他目录(如果需要)。

    cd ~
    
  5. 运行 git clone 命令。 将此处显示的 URL 替换为剪贴板中的内容:

    git clone https://github.com/your-name/mslearn-tailspin-spacegame-web-deploy.git
    
  6. 移动到 mslearn-tailspin-spacegame-web-deploy 目录。 这是存储库的根目录。

    cd mslearn-tailspin-spacegame-web-deploy
    

设置上游远程库

远程库是一个 Git 存储库,团队成员可在这里进行协作(例如 GitHub 上的存储库)。 这里列出了你的远程并添加指向 Microsoft 存储库副本的远程,这样就可以获得最新的示例代码。

  1. 运行以下 git remote 命令可列出远程库:

    git remote -v
    

    你可以看到你对存储库具有提取(下载)和推送(上传)访问权限:

    origin  https://github.com/username/mslearn-tailspin-spacegame-web-deploy.git (fetch)
    origin  https://github.com/username/mslearn-tailspin-spacegame-web-deploy.git (push)
    

    Origin 指定你在 GitHub 上的存储库。 对另一个存储库中的代码创建分支时,通常将原始远程库(之前从中创建分支的库)命名为“上游”。

  2. 运行以下 git remote add 命令可创建一个名为“upstream”的远程库,它指向 Microsoft 存储库:

    git remote add upstream https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy.git
    
  3. 再次运行 git remote 来查看变化:

    git remote -v
    

    可以看到,你仍然对存储库具有提取(下载)和推送(上传)访问权限。 现在,你还对 Microsoft 存储库具有提取访问权限:

    origin  https://github.com/username/mslearn-tailspin-spacegame-web-deploy.git (fetch)
    origin  https://github.com/username/mslearn-tailspin-spacegame-web-deploy.git (push)
    upstream        https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy.git (fetch)
    

在文件资源管理器中打开项目

在 Visual Studio Code 中,终端窗口指向 Space Game Web 项目的根目录。 现在,你将从文件资源管理器中打开项目,以查看其结构并使用文件。

  1. 打开项目最简单的方法是在当前目录中重新打开 Visual Studio Code。 为此,可在集成终端中运行以下命令:

    code -r .
    

    可以在文件资源管理器中查看目录和文件树。

  2. 重新打开集成终端。 终端会将你带至 Web 项目的根目录。

如果 code 命令失败,则需要将 Visual Studio Code 添加到系统路径。 为此,请执行以下操作:

  1. 在 Visual Studio Code 中,选择 F1 或者“视图”>“命令面板”来访问命令面板。
  2. 在命令面板中,输入“Shell 命令: 在 PATH 中安装 "code" 命令”。
  3. 重复上一过程,在文件资源管理器中打开项目。

现在你已设置好,可从本地开发环境使用 Space Game 源代码和 Azure Pipelines 配置了。

创建 Azure 应用服务环境

在这里,你要创建用于定义管道阶段的环境。 为每一个阶段(“开发”、“测试”和“过渡”)创建一个应用服务实例。

使用 Azure Pipelines 创建发布管道中,你通过 Azure 门户启动了应用服务。 虽然门户是探索 Azure 上的可用功能或执行基本任务的一种很好的方法,但启动诸如应用服务之类的组件可能会很繁琐。

在此模块中,你将使用 Azure CLI 来启动 3 个应用服务实例。 可以从终端或通过 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”。 出现提示时,选择“Bash”体验。

    A screenshot of the Azure portal showing the location of the Cloud Shell menu item.

    注意

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

选择 Azure 区域

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

要使命令更容易运行,请先选择一个默认区域。 指定默认区域后,除非指定其他区域,否别后面的命令会使用该区域。

  1. 在 Cloud Shell 中,若要列出 Azure 订阅提供的区域,请运行以下 az account list-locations 命令。

    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
    

创建服务实例实例

在这里,请为要部署到的三个阶段(“开发”、“测试”和“过渡”)创建应用服务实例。 下面是遵循的流程的简要概述:

  1. 生成一个使 Web 应用域名唯一的随机数。

    此步骤仅供学习之用。 实际上,你可以选择与你的应用或服务的名称相匹配的域名。

  2. 创建包含所有应用服务实例的资源组。

    为便于学习,请在此处创建一个包含所有应用服务实例的资源组。 实际上,你可以为每个应用服务实例创建一个单独的资源组,以便你可以更好地控制每个实例的生命周期。

  3. 创建应用服务计划。

    应用服务计划定义 Web 应用的 CPU、内存和存储资源。 在这里,你将使用“B1 基本”计划。 此计划适用于流量需求较低的应用。 “标准”计划和“高级”计划适用于生产工作负载。 这些计划在专用虚拟机实例上运行。

  4. 为每个“开发”、“测试”和“过渡”环境创建一个应用服务实例。

  5. 获取每个环境的主机名。

  6. 验证每个环境是否正在运行,以及主页是否可访问。

    备注

    为便于学习,这里使用默认网络设置。 这些设置使得可从 Internet 访问你的网站。 实际上,你可配置这样一个 Azure 虚拟网络,它将你的网站置于不可从 Internet 路由且仅供你和你的团队访问的网络中。 稍后,你可重新配置网络,使用户可访问你的网站。

要创建应用服务实例,请遵循以下步骤:

  1. 在 Cloud Shell 中,生成一个使 Web 应用域名唯一的随机数。

    webappsuffix=$RANDOM
    
  2. 若要创建一个名为 tailspin-space-game-rg 的资源组,请运行以下 az group create 命令

    az group create --name tailspin-space-game-rg
    
  3. 若要创建一个名为 tailspin-space-game-asp 的应用服务计划,请运行以下 az appservice plan create 命令

    az appservice plan create \
      --name tailspin-space-game-asp \
      --resource-group tailspin-space-game-rg \
      --sku B1 \
      --is-linux
    

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

    重要

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

  4. 若要创建 3 个应用服务实例,分别用于每个环境(开发、测试和过渡),请运行以下 az webapp create 命令。

    az webapp create \
      --name tailspin-space-game-web-dev-$webappsuffix \
      --resource-group tailspin-space-game-rg \
      --plan tailspin-space-game-asp \
      --runtime "DOTNET|6.0"
    
    az webapp create \
      --name tailspin-space-game-web-test-$webappsuffix \
      --resource-group tailspin-space-game-rg \
      --plan tailspin-space-game-asp \
      --runtime "DOTNET|6.0"
    
    az webapp create \
      --name tailspin-space-game-web-staging-$webappsuffix \
      --resource-group tailspin-space-game-rg \
      --plan tailspin-space-game-asp \
      --runtime "DOTNET|6.0"
    

    为便于学习,在这里,可将相同的应用服务计划(B1 基本)应用于每个应用服务实例。 实际上,你将分配一个与预期工作负载匹配的计划。

    例如,对于映射到“开发”和“测试”阶段的环境,B1 基本可能适用,因为你只希望团队访问这些环境。

    对于“过渡”环境,可以选择与生产环境匹配的计划。 该计划可能会提供更高的 CPU、内存和存储资源。 在该计划下,你可以在类似于你的生产环境的环境中运行性能测试(例如负载测试)。 你可以在不会影响站点的实时流量的情况下运行测试。

  5. 若要列出每个应用服务实例的主机名和状态,请运行以下 az webapp list 命令。

    az webapp list \
      --resource-group tailspin-space-game-rg \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    

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

    HostName                                                 State
    -------------------------------------------------------  -------
    tailspin-space-game-web-dev-21017.azurewebsites.net      Running
    tailspin-space-game-web-test-21017.azurewebsites.net     Running
    tailspin-space-game-web-staging-21017.azurewebsites.net  Running
    
  6. (可选)转到一个或多个主机名。 验证它们是否正在运行且是否出现默认主页。

    将显示以下内容:

    A screenshot of a web browser showing the default home page on Azure App Service.

重要

此模块中的清理 Azure DevOps 环境页面包含重要的清理步骤。 清理资源可帮助确保完成此模块后不再支付 Azure 资源费用。 即使未完成此模块,也要务必执行清理步骤。

在 Azure Pipelines 中创建管道变量

使用 Azure Pipelines 创建发布管道中,你在管道中添加了一个变量,用于在应用服务中存储 Web 应用的名称。 在这里也要这样做。 但这一次,你将为对应于管道中的“开发”、“测试”或“过渡”阶段的每个应用服务实例添加一个变量。

你可在管道配置中对这些名称进行硬编码,但如果将其定义为变量,配置的可重用性会更高。 此外,如果应用服务实例的名称发生更改,则可以在不修改配置的情况下更新这些变量并触发管道。

若要添加变量:

  1. 在 Azure DevOps 中,转到“Space Game - Web - 多阶段”项目。

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

    A screenshot of Azure Pipelines showing the location of the Library menu option.

  3. 选择“+ Variable group”。

  4. 在“Properties”下,输入“Release”作为变量组名称。

  5. 在“Variables”下,选择“+ Add”。

  6. 输入 WebAppNameDev 作为变量的名称。 输入与开发环境对应的应用服务实例的名称作为它的名称,例如 tailspin-space-game-web-dev-1234。

  7. 重复上述两个步骤两次,为“测试”和“过渡”环境创建变量。 示例如下:

    变量名称 示例值
    WebAppNameTest tailspin-space-game-web-test-1234
    WebAppNameTest tailspin-space-game-web-test-1234

    确保将每个示例值都替换为与环境对应的应用服务实例。

    重要

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

  8. 在页面开头附近选择“保存”,将变量保存到管道中。

    变量组如下所示:

    A screenshot of Azure Pipelines showing the variable group. The group contains three variables.

创建“开发”和“测试”环境

使用 Azure Pipelines 创建发布管道中,你为“开发”环境创建了一个环境。 在这里,请针对“开发”和“测试”环境重复此过程。 稍后请设置“过渡”环境,其中包括更多条件。

若要创建“开发”和“测试”环境,请执行以下操作:

  1. 在 Azure Pipelines 中,选择“Environments”。

    A screenshot of Azure Pipelines showing the location of the Environments menu option.

  2. 要创建开发环境,请执行以下操作:

    1. 选择“创建环境”。
    2. 在“名称”下,输入“开发”。
    3. 让其余字段保留其默认值。
    4. 选择“创建”。
  3. 要创建测试环境,请执行以下操作:

    1. 返回到“环境”页面。
    2. 选择“新建环境”。
    3. 在“名称”下,输入“测试”。
    4. 选择“创建” 。

创建服务连接

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

重要

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

  1. 在 Azure DevOps 中,转到“Space Game - Web - 多阶段”项目。

  2. 在页面左下角,选择“项目设置”。

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

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

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

  6. 填写以下字段:

    字段
    范围级别 订阅
    订阅 Azure 订阅
    资源组 tailspin-space-game-rg
    服务连接名称 Resource Manager - Tailspin - Space Game

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

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

  8. 选择“保存”。

    为了验证它是否可连接到你的 Azure 订阅,Azure DevOps 会执行测试连接。 如果 Azure DevOps 无法连接,则你有机会再次登录。