软件必须编写、测试并部署到生产环境中。为了实现这一点,开发人员和DevOps以自动化的方式构建CI/CD流水线或构建/发布流水线,自动化执行许多这方面的活动。
A pipeline allows developers, DevOps teams and others to produce and deploy reliable code. In the Microsoft realm, the way to build a pipeline is with Azure DevOps with a feature called Azure Pipelines.
Azure Pipelines允许您自动运行构建、执行测试并将代码(发布)部署到各种开发和生产环境中。但如果您以前从未听说过Azure DevOps或流水线,或者以前从未使用Azure DevOps构建过流水线,那么这个Azure Pipelines教程适合您。
特别感谢Peter De Tender,Microsoft Azure技术培训师,在撰写本文时提供的帮助。
项目概述
这是一个项目文章,我们将介绍如何构建项目或实施解决方案。每个部分都将累积步骤,建立在前面的步骤之上。
在这个项目中,您将从零开始学习如何创建您的第一个Azure DevOps流水线。您将学到诸如从Git版本控制提交中调用构建、自动执行测试,最终将软件包发布到各个环境的概念。通过这个项目的最后,您将拥有一个作为Azure WebApp部署的示例电子商务应用程序。
完成这个项目应该需要30分钟。
请注意,如果您按照此项目并立即删除创建的资源,您的Azure账户将不会收费。不要忘记将它们删除!
目标受众
本项目将涵盖在Azure DevOps Web UI中设置您的第一个Azure Pipeline的基础知识。如果您是全新接触Azure Pipelines,那么您将从本项目中学到很多知识;但如果您已经在构建自己的Pipeline或者是Azure Pipelines专家,那么您可能不会学到太多新东西。
环境要求
如果您计划逐步完成此项目,请确保至少具备以下条件:
- 一个Azure账户
- 已经登录到具有全局管理员或类似权限的Azure门户
- A GitHub account
- 已创建一个空的Github仓库
- 使用dotnetcore 2.2和Linux平台部署的空的Azure WebApp
创建 Azure DevOps 组织
由于我们是从零开始,您首先会创建一个称为组织的“基本”对象,其中包含所有 Azure DevOps 功能和服务。组织是存储所有项目的地方,您将在下一部分学习如何构建这些项目。
- 从Azure 门户浏览到所有服务,搜索DevOps并选择Azure DevOps。您可以在下面看到期望的内容。这将打开Azure DevOps刀片,如下所示。

2. 接下来,点击我的 Azure DevOps 组织并提供您的 Azure 凭据。您将被带到一个页面,在此页面上,您可以创建一个新的组织,如下所示。在此处,点击蓝色创建新组织按钮。

3. 在下一页上,为组织提供一个名称。如果在使用特定名称时遇到问题,请确保检查Azure DevOps 组织命名约定。在此屏幕上,还要指定距离您最近的 Azure 区域。完成后,点击继续。

此时,您的 Azure DevOps 组织已创建!
创建 Azure DevOps 项目
下一步是创建一个项目。 项目是一个容器,用于存放将要创建的流水线、各种工件和与特定服务或软件相关的任何其他信息。
Azure DevOps允许您在与上面执行的创建组织的相同工作流程中创建项目。如果您一直在跟随进行操作,现在应该会显示一个如下所示的项目创建页面。
- 在项目创建页面中,在项目名称字段中提供一个项目名称。对于此项目,您将使用一个名为devopsdemo的Azure DevOps项目。
- 通过单击+ 创建项目按钮来确认项目的创建。
- 目前,将可见性保留为私有。这样可以确保您的项目不会暴露在互联网上。公共项目允许项目的非成员和未登录用户对项目的工件进行只读访问。

此时,您的Azure DevOps工作区(项目+组织)已创建完成。如果您一直在跟随,现在应该已经创建了一个名为pdtitws123的Azure DevOps组织,并且该组织中有一个名为devopsdemo的项目。

构建Azure DevOps构建流水线
现在您已经设置了Azure DevOps组织和项目,您可以在其中创建一个构建流水线。流水线是发生所有魔法的地方。这是您将创建构建以执行诸如编译代码、引入依赖关系等各种任务的地方。
- 从仪表板中,选择流水线,然后选择生成。

2. 您将看到一条消息,告诉您目前没有找到生成流水线。单击新建流水线开始创建生成流水线。

3. 然后将提示您代码存储在何处。在此项目中,代码存储在 GitHub 存储库中。选择GitHub。这是代码存储的地方,并且触发生成的触发器将来自此处。

4. 单击GitHub后,将提示您提供您的 GitHub 帐户凭据,如下所示。在执行此步骤之前,请确保按照本文档的先决条件部分创建了一个空的 GitHub 存储库!

5. 接下来,确认您被要求授权 Azure 流水线的步骤。这样可以确保 Azure DevOps 有权访问您的 GitHub 存储库。

将 GitHub 存储库链接到生成流水线
一旦您已经向 Azure DevOps 授予了对您的 GitHub 帐户的权限,现在将 GitHub 存储库链接到生成流水线。
- 选择您为此项目创建的空 GitHub 存储库。

2. 允许项目从您之前选择的存储库中读取、写入和检查源代码。然后通过单击批准并安装来确认此过程。

3. 通过单击确认,您将看到一个错误生成,如下所示。这个错误会发生,因为选择的 GitHub 存储库是空的。

此时,您的 GitHub 存储库将链接到您的 Azure DevOps 生成流水线中。
每次想将GitHub存储库链接到Azure DevOps构建管道时,无需每次创建全新的管道。
填充示例GitHub存储库代码
Azure DevOps构建管道没有代码时将无法运行。此时代码并不重要。为了在存储库中获取一些代码,我们将使用现有存储库克隆一些代码。在这个存储库中,我已经有了发布在Azure WebApps中的电子商务示例应用程序的所有源代码。
此存储库的示例代码将包含一个名为SimplCommerce的电子商务应用程序示例。该应用程序是一个开源的dotnetcore应用程序,比典型的“hello world”项目更为现实。
- 导航到此示例GitHub存储库,并单击导入代码如下所示。

2. 对于旧存储库的克隆URL,请使用http://github.com/007FFFLearning/SimplDev,然后单击开始导入。

当成功完成存储库导入步骤时,刷新Azure DevOps Pipeline窗口,现在应该可以继续了。
检查和查看YAML中的构建管道
这一阶段,您将处于流水线创建过程的审查阶段。现在,您将看到一个基于YAML的构建流水线表示。此YAML文件是根据检测到的源代码语言自动生成的,该语言是dotnetcore。
OAzure DevOps的一个真正的好处是流水线YAML。在许多其他DevOps工具中,您必须手动构建流水线文件。

手动运行Azure构建流水线
在连续集成(CI)流水线中,通常通过提交到源代码控制来触发构建。但是,您也可以手动触发构建流水线。让我们手动启动构建流水线,看看会发生什么。
如果您一直在跟进,那么在这一点上,您应该能够点击运行来启动构建流水线。这将启动流水线构建过程,您可以从下面的屏幕截图中看到。

几秒钟后,您可以看到该过程将在macOS上运行,如下图所示。构建流水线将实时返回信息,显示流水线中的每个作业和任务的运行情况。

然后,构建流水线将为其他操作系统(在此示例中)重复相同的过程,如下图所示。所采取的步骤将根据YAML文件的构建方式而大不相同。

一旦构建完成,您将看到绿色的复选标记,如下图所示。该屏幕截图指示每个平台构建都成功通过。

你现在已经创建了一个Azure DevOps构建流水线!
创建Azure DevOps发布流水线
构建流水线已经创建,这是一项很大的进展。如果你在这个地方停下来,你将在完整的自动化流水线上走得很远。但是我们还没有完成!软件的最终目标是部署,以便客户可以使用它。现在是时候使用一个发布流水线自动化发布了!
A release pipeline takes a build artifact, a result of the build process and deploys that to one or more environments. In this Project, you’re going to use a release pipeline to publish code in the GitHub repo to an Azure Web App.
- 从Azure DevOps中,点击流水线,然后点击发布。

2. 接下来,选择新建,然后选择新建发布流水线。这将启动新建发布流水线向导。

3. 在右侧的模板列表中,选择Azure应用服务部署。你将看到许多不同类型的模板,可以节省创建未来发布流水线的时间。

4. 为阶段名称提供一个描述。该阶段将包含发布任务。对于这个项目,使用名称Deploy_to_webapp。

发布流水线现在应该看起来像下面的截图。

5. 在阶段字段中,选择1个作业,1个任务。这个字段是你最终将提供用于实际部署的Azure Web App环境的设置的地方。
6. Azure应用服务部署模板的一部分是一些参数,在这个屏幕上你需要定义这些参数。
- 舞台名称 – 在这个例子中是 Deploy-to-webapps2。
- Azure 订阅 – 选择您的订阅并通过 Authorize 确认(需要凭据)
- 应用类型 – Web App on Linux
- 应用服务名称 – 您之前创建的 Web 应用

7. 完成后,单击顶部菜单中的 Pipeline,如下图所示。这将返回到主屏幕,并允许您完成下一步,即指定 artifacts。

向 Azure DevOps Release Pipeline 添加 Artifacts
在发布管道中,有许多不同的项需要部署。这些项被称为 artifacts。简单地说,artifacts 是应用程序的可部署组件。Azure Pipelines 可以部署由各种 artifact sources 生成的 artifacts。
在本节中,让我们了解如何将 artifacts 添加到发布管道。
- 在 Pipeline 屏幕上,单击 Add an Artifact。
- Source Type 已经设置为 Build,这是您想要的,因为您将部署之前创建的构建管道的输出。在 Source(构建管道) 下拉菜单中选择之前创建的构建管道。
- 完成后,单击添加以保存配置。

4. 最后,单击屏幕右上角的保存按钮以保存发布管道。
创建 Azure DevOps 发布
创建发布管道后,您将开始创建发布。 发布是管道的特定运行。 将发布管道视为模板,将该发布管道的特定实例视为发布。 一旦您有了发布,该发布就可以被部署。
要创建发布:
- 单击下面窗口右上角的创建发布按钮。

2. 您不会做任何花哨的事情,因此在创建新发布屏幕上,接受默认设置,然后单击创建。 您此时只有一个阶段,并且有一个要部署的构建工件的版本。

3. 几秒钟后,您将收到一个通知(绿色条),指示发布已创建如下所示。 现在单击发布-1,将重定向您到发布过程的详细信息。

您现在已经创建了一个发布,并且可以准备部署!
手动部署发布
A release is a set of instructions to perform on how to deploy a build. You’ve done all of that. Now it’s time to actually run those instructions and deploy code to an environment.
在您之前创建的发布-1发布上:
- 选择Deploy_to_webapp阶段并确认部署。当您这样做时,状态将如下所示更改为进行中。此时,发布正在从之前执行的构建管道中获取源代码,并将其推送到 Azure WebApp 实例。
此步骤将在后端启动一个作业,使用一个代理复制源代码并执行实际的发布周期。

2. 当阶段处于进行中时,单击该阶段。您将在控制台输出区域中看到任何日志信息。

完成后,阶段应显示成功,如下所示。

如果一切顺利,发布应该已完成,现在您应该拥有一个发布到 Azure Web App 的 web 应用程序!
检查部署的 Azure WebApp
现在整个流程已经完成,请务必查看您劳动的成果。
- 登录Azure 门户,导航到您在发布管道中选择为目标的 Azure WebApp,并按照下面所示复制 URL。

2. 现在将该URL粘贴到浏览器中,提供Azure Web App的URL。您的浏览器现在应该加载电子商务示例应用程序,类似于以下主页

您现在已经完成了!您现在拥有了一个从GitHub仓库部署的Azure Web应用程序,可以实现最大程度的自动化!
清理工作
如果您一路跟随本项目进行操作,现在您应该拥有一个新的Azure DevOps组织、项目、构建流水线和发布流水线。如果您完成了测试,请务必删除创建的原始组织,以免因任何Azure资源而产生费用。
要这样做:
- 返回到您的主Azure DevOps工作区。
- 点击左下角的组织设置。
- 在概述屏幕上,单击删除按钮,位于页面底部的删除组织下。
- 键入组织名称,然后单击删除。这样应该会删除您刚刚执行的所有工作。
您的收获
如果您按照本项目中的说明进行操作,您已经在Azure DevOps中从头开始创建了整个CI/CD流水线。现在,您应该对这个过程有一个很好的了解。
Azure Pipelines可以比您在本项目中所做的要深入得多,但是现在您应该对整个流程有一些基础知识。