【51CTO.com快译】由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资源面板将需要几分钟才能完成加载。同时,该项目还会创建:
- 带有.NET代码的存储库示例的团队项目。
- Azure中的Azure Web App和Azure SQL 数据库(如果选择了数据库切换的话)。
- 构建管道以编译和测试应用。
- 发布管道以部署应用。
- 接着,您可以在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的下方,您可以看到五项可选任务:
- Azure资源部署 – 它会部署诸如:Azure Web App和Azure SQL数据库等所有Azure资源,以供应用程序的使用。
- Azure应用服务部署 – 它会将应用包部署到网站上。
- Azure SQL数据库部署 – 各种有关SQL的更改会被部署到数据库上。
- Visual Studio测试 – 可以在部署后,运行功能测试。
- 如下图所示,在左侧面板中,您将会在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.<div class="content-body">
- 2.<div class="success-text">Success!</div>
- 3.<div class="description line-1">Azure DevOpsProject has been successfully setup</div>
- 4.<div class="description line-2"> Your ASP.NET Core app is up and running on Azure</div>
- 5.<div class="description line-3">This is a test message.</div>
- 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
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】