练习 - 设置 Azure DevOps 环境

已完成

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

要完成这些任务,你需要:

  • 添加一名用户以确保 Azure DevOps 可连接到你的 Azure 订阅。
  • 设置一个 Azure DevOps 项目供本模块使用。
  • 在 Azure Boards 上,将本模块的工作项移动到“正在执行”列。
  • 在 Azure Cloud Shell 中使用 Azure CLI 创建 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 组织添加一名用户。 有关详细信息,请查看向组织或项目添加用户。 添加用户时,请选择“Basic”访问级别。

然后注销 Azure DevOps。 然后再次使用用于登录 Azure 订阅的 Microsoft 帐户登录。

获取 Azure DevOps 项目

在这里,需确保 Azure DevOps 组织已设置好,可完成本模块的其余操作。 可以通过运行在 Azure DevOps 中创建项目的模板来完成此任务。

该学习路径中的模块形成了一个进程,在这一进程中,你将跟随 Tailspin Web 团队完成他们的 DevOps 之旅。 为便于学习,每个模块都有一个关联的 Azure DevOps 项目。

运行模板

运行一个模板来设置 Azure DevOps 组织中的所有内容。

在 Azure DevOps 演示生成器网站上,按照以下步骤运行模板:

  1. 选择“Sign In”并接受使用条款。

  2. 在“新建项目”页面上,选择 Azure DevOps 组织。 然后输入项目名称,例如“Space Game - web - 功能测试”。

    Screenshot of Creating a project through the Azure DevOps Demo Generator.

  3. 选择“是,我将对此存储库创建分支”。 然后选择“授权”。

  4. 选择“创建项目”。

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

  5. 选择“导航到项目”,转到你在 Azure DevOps 中的项目。

重要

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

设置项目的可见性

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

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

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

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

在本部分,你要在 Azure Boards 上为自己分配一个与本模块相关的工作项。 你还需将工作项移到“Doing”状态。 实际操作时,团队将在每次冲刺 (sprint) 或工作迭代的开始创建工作项。

以这种方式分配工作会为你提供一个工作清单。 通过它,你的团队可了解你的当前工作内容和剩余工作量。 它还可以帮助团队对正在进行的工作 (WIP) 实施限制,以避免一次执行过多的工作。

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

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

注意

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

现在你要将第三个项“自动质量测试”移至“正在执行”列。 然后,你要将你自己分配至该工作项。 “自动质量测试”与为 Space Game 网站自动执行 UI 测试有关。

设置工作项:

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

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

  2. 在“自动质量测试”工作项上,选择卡片底部的向下箭头。 然后将工作项分配给自己。

    A 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 CLI 创建了应用服务实例。 现在将执行相同的操作。

重要

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

通过 Azure 门户打开 Cloud Shell

  1. 转到 Azure 门户并登录。
  2. 在菜单栏上,选择 Cloud Shell。 出现提示时,选择“Bash”体验。

选择 Azure 区域

在此处指定将在其中创建 Azure 资源的默认区域或地理位置。

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

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

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

    az configure --defaults location=<REGION>
    

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

    az configure --defaults location=westus2
    

创建应用服务实例

在这里,你将为你要部署到的三个阶段(“开发”、“测试”和“过渡”)创建应用服务实例。

备注

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

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

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

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

    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. 运行以下 az webapp create 命令创建 3 个应用服务实例,分别用于“开发”、“测试”和“过渡”环境。

    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 基本)应用于每个应用服务实例。 实际操作时,你会分配一个与预期工作负载匹配的计划。

  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. 可选步骤:将一个或多个名称复制并粘贴到浏览器以验证它们是否正在运行,以及是否显示默认主页。

    应会获取此页:

    The default home page on Azure App Service.

重要

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

在 Azure Pipelines 中创建管道变量

使用 Azure Pipelines 创建多阶段管道中,你为管道中“开发”、“测试”和“过渡”阶段所对应的每个应用服务实例都添加了一个变量。 现在将执行相同的操作。

管道配置中的每个阶段会使用这些变量来确定要部署到哪个应用服务实例。

添加变量:

  1. 在 Azure DevOps 中,转到“Space Game - web - 功能测试”项目。

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

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

  3. 选择“+ Variable group”。

  4. 在“属性”下,输入“发布”作为变量组名称。

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

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

  7. 再重复步骤 5 和 6 两次,为“测试”环境和“过渡”环境创建变量,如下表所示:

    变量名称 示例值
    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. 选择“创建” 。
  4. 创建“过渡”环境:

    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. 请确保选中“Grant access permission to all pipelines”。

  8. 选择“保存” 。

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