练习 - 设置环境

已完成

在本部分中,需确保 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 订阅中拥有的资源。 为了简化操作流程,请使用相同的 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 Demo Generator 网站上,按照以下步骤运行模板:

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

  2. 在“Create New Project”页面上,选择 Azure DevOps 组织。 然后输入项目名称,例如“Space Game - web - Deployment patterns”。

    Screenshot that shows how to create 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),团队已处理了这些主要问题:

Screenshot of Azure Boards that shows the tasks for this sprint.

注意

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

在这里,你要将第五项“改进发布节奏”移到“Doing”列。 然后,将自己分配到该工作项。 改进发布节奏涉及到选择一种让你能够向用户快速发布更改的部署模式。

设置工作项:

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

    Screenshot of Azure DevOps that shows the location of the Boards menu.

  2. 在“改进发布节奏”工作项的底部,选择向下箭头。 然后将工作项分配给自己。

    Screenshot of Azure Boards that shows the location of the down arrow.

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

    Screenshot of Azure Boards that shows the card in the Doing column.

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

在本地设置项目

在这里,你要在 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 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 \
      --name tailspin-space-game-test-asp \
      --resource-group tailspin-space-game-rg \
      --sku B1 \
      --is-linux
    
    az appservice plan create \
      --name tailspin-space-game-prod-asp \
      --resource-group tailspin-space-game-rg \
      --sku P1V2 \
      --is-linux
    

    重要

    如果 B1 SKU 不可作为你的 Azure 订阅的一部分提供,那么请选择其他计划,例如 S1(标准)。

    回忆一下,应用服务计划可定义为要运行的 Web 应用提供的 CPU、内存和存储资源。

    第一个命令指定 B1 计划。 此计划在基本层上运行。 应用服务环境对开发阶段和测试阶段使用此计划。 “B1 基本”计划适用于具有低流量要求的应用,例如在开发或测试环境中。

    第二个命令指定 P1V2 计划,它在高级层上运行。 此计划用于过渡阶段。 “高级 P1V2”计划用于生产工作负载。 它在专用虚拟机实例上运行。

    基本计划层不提供额外的部署槽位。 但高级计划会提供。 因此,你需要对过渡环境使用高级计划。

  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-test-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-test-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-prod-asp \
      --runtime "DOTNET|6.0"
    

    请注意在这里,你要对开发和测试环境的应用服务实例应用相同的应用服务计划,也就是“B1 基本”计划。 对过渡环境的应用服务示例应用“高级 P1V2”这一应用服务计划。

  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. (可选)转到一个或多个主机名。 验证它们是否正在运行且是否出现默认主页。

    你会在每个环境中看到以下页面:

    Screenshot of the default home page in Azure App Service.

重要

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

在 Azure Pipelines 中创建管道变量

使用 Azure Pipelines 创建多阶段管道中,你为管道中开发、测试和过渡阶段所对应的每个应用服务实例都添加了一个变量。 在这里也要这样做。

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

若要添加变量:

  1. 在 Azure DevOps 中,转到“Space Game - web - Deployment patterns”项目。

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

    Screenshot of Azure Pipelines that shows 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. 在页面顶部附近选择“保存”,将变量保存到管道中。

    变量组如下所示:

    Screenshot of Azure Pipelines that shows the variable group. The group contains three variables.

创建开发、测试和过渡环境

在之前的模块中,创建了“开发”、“测试”和“过渡”环境。 在这里,请重复该过程。

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

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

    Screenshot of Azure Pipelines that shows 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 - Deployment patterns”项目。

  2. 在页面的底角,选择“Project settings”。

  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 无法连接,你有机会再次登录。

从 GitHub 中提取分支

现在,从 GitHub 中提取 blue-green 分支。 然后,查看或切换到该分支。

此分支包含了之前模块中使用的 Space Game 项目,还有一个便于开始操作的 Azure Pipelines 配置。

  1. 在 Visual Studio Code 中打开集成终端。

  2. 运行以下 git 命令,从 Microsoft 存储库中提取名为 blue-green 的分支并切换到该分支。

    git fetch upstream blue-green
    git checkout -B blue-green upstream/blue-green
    

    通过这些命令的格式,你可从 Microsoft GitHub 存储库获取起始代码(称作 upstream)。 稍后,你会将此分支推送到 GitHub 存储库(称作 origin)。

  3. (可选)从 Visual Studio Code 中打开 azure-pipelines.yml。 熟悉初始配置。

    该配置类似于你在此学习路径前面的模块中创建的配置。 它只生成应用程序的发布配置。 为简洁起见,它省略了在之前的模块中设置的触发器、手动审批和测试。

    为便于学习,此配置将提示从任何分支更改为“开发”、“测试”和“过渡”。 更可靠的方法可能是提示仅从发布分支或 main 进行更改。 你在使用 Azure Pipelines 创建多阶段管道模块中使用了这种强大的方法。

运行管道并查看已部署的网站

在这里,你要将初始配置推送到 GitHub,以便与团队保持进度一致。 稍后,你将向过渡环境添加一个槽,这样就可实现蓝绿部署。

  1. 在 Visual Studio Code 中打开集成终端。

  2. 运行以下 git commit 命令,将空条目添加到提交历史记录。

    git commit --allow-empty -m "Trigger the pipeline"
    

    此步骤仅供学习之用。 它不是典型步骤。 我们会提供起始代码,它目前无需修改它。 --allow-empty 标志确保下一步操作将分支成功地推送到 GitHub 并触发 Azure Pipelines 运行。

    如果省略了此步骤,你在下一步中运行的 git push 命令将不执行任何操作。 所以,它不会触发 Azure Pipelines 运行。

  3. 运行以下 git push 命令,将分支上传到 GitHub 存储库。

    git push origin blue-green
    
  4. 在 Azure Pipelines 中,转到生成。 然后,在生成运行时对其进行跟踪。 出现提示时,选择“允许”向不同阶段授予部署权限。

  5. 管道运行完成后,导航到摘要页以查看管道状态。

    Screenshot of Azure Pipelines that shows the completed stages.

  6. 导航到与每个阶段对应的 URL。 Web 应用应部署到每个环境。

    Screenshot of a web browser that shows the Space Game website in the Dev environment.