如何在Azure DevOps中构建CI/CD管道,


由Microsoft Azure提供的Azure DevOps是自动化CI/CD流程领域的领先工具。在自动化构建和代码项目中,开发人员可以使用Azure管道将持续集成(CI)和持续交付(CD)相结合,通过一致性的测试,将构建好的代码发送至目标环境。

在本文中,我们将共同研究如何配置Azure CI/CD管道,并将其集成到LambdaTest Azure DevOps,以进行错误跟踪。

什么是CI/CD管道?

CI/CD管道往往被用于自动化的持续集成和持续部署过程中。其管道可以通过构建、测试、合并和部署等阶段,来促进软件的整个交付过程。简而言之,作为可运行的步骤规范,管道能够通过节省开发人员的手动工作量与时间,高效地交付出新的软件版本。

CI/CD管道的阶段:

1. 源阶段:在大多数情况下,开发人员在尝试对中央存储库进行更改时,会触发管道的运行。这些触发器往往是由源阶段中的CI/CD管道工具(https://www.lambdatest.com/blog/27-best-ci-cd-tools/)所设置的。

2. 构建阶段:在构建到最终用户应用的可运行实例中时,该阶段体现了源代码及其依赖项的组合。同时,Java等内置于应用的语言也需要在此阶段完成编译。如果需要构建Docker镜像,我们也可以在此阶段进行。当然,倘若此阶段失败的话,则意味着代码、或其依赖项中存在着潜在的错误。

3. 测试阶段:自动化测试会在此阶段对代码及其行为,开展相应的验证。该阶段就像一个筛子一样,能够防止错误到达最终用户。我们可以按照从冒烟测试到端到端集成测试的顺序,划分出多个子阶段。同样,倘若此阶段失败的话,则会暴露出代码中的各项错误。

4. 部署阶段:一旦通过了所有预定义的测试,我们就拥有了可执行的代码,接着我们便可以进行部署了。产品团队可以在此基础上划分出Beta、Staging、以及面向最终用户的Production等阶段。

值得注意的是,上面提到的阶段皆为基本阶段。您也可以添加不同的子步骤,以使得 CI/CD过程更加自动化。下面,我们来讨论Azure DevOps的CI/CD。

什么是Azure DevOps?

Azure DevOps是Microsoft Azure提供的服务集合。它通过为团队提供开发服务,以支持、规划、协作、构建和部署应用程序。通过与浏览器或IDE(集成开发环境)的集成,它为开发人员提供了如下服务:

  • Azure存储库
  • Azure管道
  • Azure看板
  • Azure测试计划
  • Azure工件

在下文中,我们将使用Azure管道,为.NET项目创建CI/CD管道,并将Azure DevOps 的CI/CD连接到LambdaTest帐户中,以便将各种错误、任务、故事等推送到Azure DevOps的项目实例中。

什么是Azure管道?

Azure CI/CD管道简化了应用开发过程中的持续集成和持续交付。您可以使用GitHub或本地容器上的现有代码,从源代码阶段开始构建,让Azure存储库维护一个中央存储库,让Azure管道维护给定项目的构建和发布管道。其中,Azure DevOps的CI/CD流程是所有开发服务的关键流程。

除了使用Azure DevOps进行持续集成和持续部署,这些管道还可用于“构建-部署-测试”工作流,以持续测试(CT)的方式,快速测试那些可扩展性例程中的变更。

Azure管道的优点:

在Azure DevOps的CI/CD实践中,Azure管道可以提供如下优势:

  • 版本控制系统:将代码放入版本控制系统,是构建Azure CI/CD管道的第一步。您可以在GitHub、Bitbucket、Subversion或任何其他Git存储库中管理源代码。同时,它也支持Team Foundation版本控制(TFVC)系统。
  • 编程语言和应用程序类型:开发者可以在Azure管道中使用包括:Java、Ruby、C、C++、Python、PHP、Go和JavaScript在内的不同语言。
  • 部署目标:具有Azure CI/CD管道的应用程序,可以被部署到多个目标环境中。其中包括虚拟机、容器、以及任何本地或云平台。
  • 定价:虽然它是一个公共的免费项目,但是对于私人项目而言,用户每个月最多仅可免费运行1800分钟的管道作业。

如何构建Azure CI/CD管道

若要创建Azure CI/CD管道,请先执行如下预备步骤:

1. 使用Azure中的Azure DevOps Starter资源,来创建一个ASP.NET类型的DevOps示例项目。

2. 检查由Azure DevOps Starter配置的Azure CI/CD管道。

3. 将DevOps示例项目克隆到系统中。

4. 提交代码并执行CI/CD。

我们稍后会使用LambdaTest与Azure DevOps的CI/CD相集成,去简化错误的跟踪,并随时将epic、故事、以及任何任务推送到相应的项目中。

预备条件

您需要通过一个已激活的Azure帐户,来创建Azure存储库和管道。如果没有的话,请事先创建一个Microsoft Azure帐户。同时,为了创建应用示例,从链接https://visualstudio.microsoft.com/downloads/处下载安装Visual Studio,并从https://dotnet.microsoft.com/download/archives处下载安装.NET Core。

使用Azure DevOps Starter创建ASP.NET DevOps项目

Azure DevOps项目简化了Azure CI/CD管道的设置。开发者可以使用现有的代码、或已创建的应用示例,作为新的Azure DevOps项目。在此,我们将按照如下步骤创建一个新的DevOps项目:

  • 从Microsoft Azure门户处,登录您的Azure帐户。
  • 选择Azure服务下的 +(即创建资源的按钮),然后搜索DevOps Starter。

  • 选择DevOps Starter并单击Create。

  • 如下图所示,选择.NET,然后单击Next。

  • NET应用示例通常由开源的ASP.NET框架、以及跨平台的ASP.NET Core框架所组成。如果您选择的是ASP.NET Core框架,那么可以按需切换到添加数据库选项,并在完成后,选择Next。

  • 您可以将应用程序部署到Windows Web App或虚拟机上。其中,Windows Web App是默认的部署目标,虚拟机则为备选项。完成之后,请单击Next。

  • 其下一屏提供了项目的名称、Azure DevOps组织、订阅和Web应用的名称(该名称需要在Azure中唯一)。您既可以保持默认值,也可以更改为美国中南部(South Central US)。在此,我们使用了默认值。

  • 您可以通过选择其他设置(Additional settings),来更改Web应用或数据库的各项参数。

  • 设置完成之后,您可以选择Done。
  • 而在部署完成之后,您可以选择Go to resource,以核对查看。

  • 至此Azure DevOps的CI/CD项目已完成创建,Azure资源面板将需要几分钟才能完成加载。同时,该项目还会创建:

  • 接着,您可以在ASP.NET Core App上与您的团队开展协作,并使用自动化的CI/CD流程,将最新的更改部署到网站上。
  • 在Azure资源的右侧面板中,您可单击“Browse”按钮,以查看应用。

检查DevOps项目示例中的CI/CD管道

完成创建后,项目会自动在Azure DevOps组织中配置一个完整的CI/CD管道。当然,您也可以对这些管道进行自定义。

在Azure Dashboard的顶部,有Build Pipelines和Release Pipelines两个选项。在任一选项被点击之后,它将打开一个带有管道的新的浏览器选项卡。

构建管道:

  • 单击Azure Dashboard上的Build Pipelines。
  • 在新的浏览器选项卡被打开后,请从屏幕的右上角选择Edit。

  • 您可以在此看到构建管道中的:从存储库中获取代码、恢复依赖项、编译应用、运行测试、以及为部署提供输出等多项任务。

  • 由于Azure DevOps可以跟踪基于构建规范所做的所有更改,并允许您比较不同的更改版本,因此通过选择在构建管道名称下的History选项卡,您将能够看到针对构建的所有更改的审计跟踪。

  • 选择Triggers选项卡,您能看到由Azure DevOps的CI/CD项目自动创建的一个名为“CI trigger”的触发器。由于开发者每次在提交到存储库时,都会启动一个新的构建,因此他们可以根据持续集成过程中的选择,按需包含或剔除各种分支。

通过选择Retention选项卡,您可以添加、查看或删除相关策略,以保留或删除一定数量的构建。

发布管道:

  • 在左侧的Pipelines部分下方,请选择Releases。
  • 由于发布管道会管理Azure DevOps中的部署,因此通过单击“Edit”,您可以检查管道。
  • 在发布管道的名称下方,您将能够发现那些与构建管道相同的选项卡。
  • 在Pipeline选项卡下,请点击Artifacts,然后选择Drop,以输出之前检查过的构建管道的工件。

  • 发布管道带有一个已启用的持续部署的触发器。每当发生新的构建时,它都会执行部署任务。当然,您也可以禁用自动化,以手动的方式执行触发器。
  • 如下图所示,您可以通过选择dev阶段,然后单击顶部的Tasks选项卡,以定义在部署过程中,需要执行的所有活动任务。

  • 在Run on agent的下方,您可以看到五项可选任务:
  • 如下图所示,在左侧面板中,您将会在Pipelines下找到Releases。此处展示了发布的历史记录。

  • 通过选择版本号,您既可以查看到版本的摘要,又可以进一步熟悉诸如:关联的工作项、以及各项测试等菜单。

  • 此外,您还可以在部署期间或之后,通过选择dev下方的日志,查看到有关部署的所有实用信息。

克隆DevOps项目示例的存储库

  • 在Azure Dashboard上,您可以单击左侧面板中的项目名称,以创建一个新的窗口。
  • 在新的窗口中,单击屏幕右上角的克隆按钮,能够复制存储库的URL。

  • 在您的系统上打开Visual Studio,然后单击右侧位于“Get started”菜单下方的“Continue without code”。
  • 依次单击IDE上的“View”->“ Team Explorer”选项,并在Explorer窗口中选择Clone。
  • 指明从Azure门户处复制到存储库的URL,以及克隆至目标存储库的文件夹路径。
  • 通过单击Clone开始克隆。
  • 在成功克隆代码之后,您可以在Solutions Explorer上查看整个项目,并按需进行更改。

注意:只要您将更改合并到远程存储库上,就会触发构建过程。

提交代码并执行CI/CD

  • 通过前面的步骤,我们已经在Visual Studio 2019中克隆了相同的存储库。而我们所创建的项目示例在Azure DevOps的Organization中有一个Git Repository,它可以在Azure Repos中被查看。
  • 在Visual Studio 2019的solutions explorer中,我们可以顺着路径找到:Application/aspnet-core-dotnet-core/Pages/Index.cshtml。
  • 双击并打开该文件,我们定位到“content–body”段,添加一行文字:“This is a test message”。

HTML

  1. 1.<div class="content-body"> 
  2. 2.<div class="success-text">Success!</div> 
  3. 3.<div class="description line-1">Azure DevOpsProject has been successfully setup</div> 
  4. 4.<div class="description line-2"> Your ASP.NET Core app is up and running on Azure</div> 
  5. 5.<div class="description line-3">This is a test message.</div> 
  6. 6.            <br /> 
  • 右击Solution Explorer中的Solution,然后单击Commit..,以签入代码。
  • 简单地留下提交的原因,然后点击Comment All。
  • 单击Sync,以将代码的更改与服务器同步。
  • 单击Push,将更改从本地存储库推送到远程存储库上。
  • 在浏览器中,依次导航至Pipelines > Builds,以产生一个构建(由于代码发生了更改,因此该构建会自动触发)。
  • 在构建完成后,即可发布。
  • 在发布完成后,请跳转到Azure DevOps的Project Dashboard。在右侧面板中,请单击Browse,以查看正处于更新状态的应用。

将Azure DevOps与LambdaTest帐户集成,以进行错误跟踪

在熟悉了Azure DevOps的持续集成和持续部署的基础上,让我们将Azure CI/CD管道与LambdaTest相集成,以提供便捷的浏览器实时测试。此类测试对于跟踪源自LambdaTest的问题,并将其显示在Azure DevOps项目的CI/CD Dashboard上是非常实用的。首先,我们来看如何将LambdaTest与Azure DevOps相集成:

  • 登录LambdaTest帐户。
  • 依次点选Integrations > Azure DevOps,以将Azure DevOps与您的LambdaTest帐户相集成。
  • 请跳转到Real Time Testing选项。
  • 在Project details的右侧面板中,请找到导航按钮,右击并复制链接的地址,然后将其粘贴到LambdaTest门户上的URL字段中。

  • 请从给定的选项中选择所需的浏览器名称与版本、操作系统、及其分辨率,以完成对于VM(虚拟机)的配置。在此,我们将使用默认配置。

  • 单击“Start”以启动VM。如果看到带有错误报告选项的网页,您可以通过左侧的Bug图标,获取错误的屏幕截图。

  • 在截屏之后,您可以使用内置的图像编辑器,添加问题或任务。而在圈出错误之后,您便可以将其报告为错误了。

  • 单击Mark as Bug,您将获得与错误相关的所有详细信息。

  •  一旦你点击了Create Issue按钮,你就能在顶部收到一条告知您“错误已成功标记”的信息。同时,该错误也会被推送到项目中。
  • 在登录到Azure门户,并转至Azure DevOps项目中后,您将会在Boards下方的左侧面板中的Work Items里看到该问题。
  • 通过点击问题的title,您可以查看到LambdaTest针对该Work Item提供的有关测试环境的详细信息和屏幕截图。
  • 当然,您也可以在Azure DevOps门户上,通过repro steps、System info、以及所有其他的详细信息,来进一步查看。

  • 上图右侧提供了Development和Deployment两种模式。在Development下,您可以创建一个新的分支,或者在解决错误之后,发送拉取请求、以及提交代码。

  • 在Deployment下,您可以转到相关的错误版本,以进一步查看。

通过创建新的分支,来处理LambdaTest报告的错误

  • 在单击创建分支之后,您需要在Development下,提供分支的名称,并选择从LambdaTest处报告错误。

  • 在通过创建新的分支处理完错误之后,您可以创建一个合并请求。

通过提交/拉取请求,处理LambdaTest报告的错误

  • 在单击提交/拉取请求后,您必须注明链接的类型、提交的ID、以及相关的注释。

  • 输入提交ID后,您便可以轻松地完成特定链接的提交。当然,您也可以将链接的类型更改为拉取请求。

除了上述通过LambdaTest报告的错误解决问题的方法,您也可以将此类错误分派给开发人员或团队,以便他们采用敏捷的方法予以处理。

结论

在企业开发服务的过程中,Azure DevOps能够实现更智能的规划、更快的协作、以及更好的交付。自动化管道的设置也能够以简洁的方式,为应用提供测试、构建和部署。通过上述介绍与实践,我们成功地实现了将LambdaTest与Azure DevOps的CI/CD项目相集成,并了解了如何使用ASP.NET Core类型的Azure DevOps项目示例,去配置管道的基本方法。

原文标题:How To Build a CI/CD Pipeline inAzure DevOps,作者:Harshit Paul

相关内容