练习 - 设置 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 组织。

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

  2. 当系统提示 输入模板列表中的模板编号时,输入 30,用于 使用 Azure Pipelines 创建多阶段管道,然后按 Enter

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

    注释

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

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

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

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

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

为存储库创建分支

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

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

  2. 选择屏幕右上角的 Fork

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

重要

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

设置项目的可见性

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

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

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

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

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

这项工作任务为你提供了一份待办事项清单。 它使其他团队成员能够了解你正在处理的内容以及剩余的工作量。 工作项还有助于强制实施进行中的工作 (WIP) 限制,使团队一次不会负责太多工作。

请记住,团队确定了当前冲刺的以下首要问题。

Azure Boards 的屏幕截图,其中显示了此冲刺的五个任务。

注释

在 Azure DevOps 组织中,工作项是按顺序编号的。 在你的项目中,每个工作项的数字可能与你在此处看到的内容不匹配。

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

设置工作项:

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

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

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

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

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

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

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

在本地设置项目

在这里,你将在 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。

    Visual Studio Code 的屏幕截图,其中显示了 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 复制到剪贴板。

    显示如何从 GitHub 存储库查找 URL 和复制按钮的屏幕截图。

  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 启动三个应用服务实例。 可以从终端或通过 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”体验

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

    注释

    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. 若要创建三个应用服务实例,请为每个环境创建一个实例(开发测试和暂存),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 "DOTNETCORE|8.0"
    
    az webapp create \
      --name tailspin-space-game-web-test-$webappsuffix \
      --resource-group tailspin-space-game-rg \
      --plan tailspin-space-game-asp \
      --runtime "DOTNETCORE|8.0"
    
    az webapp create \
      --name tailspin-space-game-web-staging-$webappsuffix \
      --resource-group tailspin-space-game-rg \
      --plan tailspin-space-game-asp \
      --runtime "DOTNETCORE|8.0"
    

    出于学习目的,请将相同的应用服务计划 B1 Basic 应用到此处的每个应用服务实例。 在实践中,你将分配一个与预期工作负荷匹配的计划。

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

    对于 过渡 环境,可以选择与生产环境匹配的计划。 该计划可能会提供更大的 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. 作为可选步骤,转到一个或多个主机名。 验证它们是否正在运行,并显示默认主页。

    你将看到以下内容:

    显示 Azure 应用服务上默认主页的 Web 浏览器的屏幕截图。

重要

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

在 Azure Pipelines 中创建管道变量

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

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

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

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

  2. 在“管道”下,选择“库”

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

  3. 选择“+ 变量组”

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

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

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

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

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

    请务必将每个示例值替换为与环境相对应的应用服务实例。

    重要

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

  8. 在页面顶部附近,选择“ 保存” 以在管道中保存变量。

    变量组如下所示:

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

创建开发和测试环境

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

创建开发和测试环境:

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

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

  2. 若要创建 开发 环境,请执行以下步骤:

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

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

创建服务连接

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

重要

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

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

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

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

  4. 选择“ 创建服务连接”,然后选择“ Azure 资源管理器”,然后选择“ 下一步”。

  5. 在页面开头,选择“应用注册”(自动)。 然后选择“ 下一步”。

  6. 填写以下字段:

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

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

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

  8. 选择“ 保存”。

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