练习 - 设置环境

已完成

在本部分中,需确保 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 组织。 有关详细信息,请参阅 将用户添加到组织或项目。 添加用户时,请选择 基本 访问级别。

然后注销 Azure DevOps,然后在用于登录到 Azure 订阅的 Microsoft 帐户下再次登录。

获取 Azure DevOps 项目

在此过程中,请确保已配置 Azure DevOps 组织,以便可以完成该模块的其余内容。 你可运行在 Azure DevOps 中创建项目的模板来进行设置。

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

运行模板

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

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

  2. 当系统提示输入模板列表中的模板编号时,输入34以在Azure Pipelines 中通过部署模式管理发布节奏,然后按 Enter

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

    注释

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

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

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

  6. 输入项目名称(如 Space Game - Web - 部署模式),然后按 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 的屏幕截图,其中显示了此冲刺 (sprint) 的任务。

注释

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

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

设置工作项:

  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. 选择 Code。 然后从“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 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. 从输出中的 “名称 ”列中,选择离你近的区域。 例如,选择 eastasiawestus2

  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运行以下命令,创建三个应用服务实例,每个应用服务实例对应一个开发测试和过渡环境。

    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 Basic 应用到用于开发和测试的应用服务实例。 对过渡环境的应用服务示例应用“高级 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. (可选步骤)转到一个或多个名称。 验证它们是否正在运行,并显示默认主页。

    在每个环境中都会看到此页面:

    Azure 应用服务中默认主页的屏幕截图。

重要

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

在 Azure Pipelines 中创建管道变量

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

管道配置中的每个阶段都使用这些变量来标识要部署到的应用服务实例。

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

  1. 在 Azure DevOps 中,转到 Space Game - Web - 部署模式 项目。

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

    Azure Pipelines 的屏幕截图,展示库菜单选项。

  3. 选择“+ 变量组”

  4. “属性”下,对于变量组名称,请输入 “发布”。

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

  6. 对于变量的名称,请输入 WebAppNameDev。 将其值设为与 Dev 环境相对应的 App Service 实例的名称,例如 tailspin-space-game-web-dev-1234

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

    变量名称 示例值
    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. 在页面顶部附近选择“Save”,将变量保存到管道中。

    变量组如下所示:

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

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

在前面的模块中,你为开发测试和过渡环境创建了环境。 在这里,重复此过程。

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

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

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

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

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

    1. 返回到 “环境” 页。
    2. 选择“新建环境”。
    3. “名称”下输入 测试
    4. 选择 创建
  4. 若要创建 预备 环境,请执行以下操作:

    1. 返回到 “环境” 页。
    2. 选择“新建环境”。
    3. 在“名称”下输入“staging”
    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
    服务连接名称 资源管理器 - Tailspin - Space Game

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

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

  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. 管道运行完成后,导航到摘要页以查看管道状态。

    Azure Pipelines 的屏幕截图,显示已完成的阶段。

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

    Web 浏览器的屏幕截图,其中显示了开发环境中的 Space Game 网站。