使用 Jenkins 在 Azure Web App 上持续集成和部署 (CI/CD) ASP.NET Core 应用程序 – 第一天
介绍
顾名思义,DevOps 是开发和运维的整合。这是一种新的自动化流程,可将软件开发及其生命周期提升到一个新的水平,从而减少手动操作和风险/容易出错的情况。它增加了交付的价值并有助于提高软件的质量。在当今时代,如果我们环顾四周,我们会看到许多构建来利用 DevOps 的工具和技术。其中之一是Jenkins 。Jenkins 并不新鲜,但其无缝且简单的集成到任何系统的方法使其更加健壮和可靠。集成和部署是麻烦的手动任务的日子已经一去不复返了。拥有这些类型的工具可以帮助开发人员,实际上是整个团队,忘记集成和部署,因为他们知道有一个自动化流程来处理这个问题。本文将详细介绍使用 Jenkins 进行持续集成和部署的主题。本文将解释 CI/CD、Jenkins、Jenkins 入门、在本地集成和部署 ASP.NET Core 应用程序以及到 Azure 服务的概念。在学习过程中,我们还将介绍创建 Azure 服务、创建 Azure 服务主体和在 Azure 上配置 Jenkins 等主题。
路线图
以下是我们将遵循的路线图,以完全学习使用 Jenkins 在 Azure Web 应用程序上进行 Asp.Net Core 应用程序的持续集成和部署 (CI/CD) 的端到端开发和配置。
- 第 1 天:使用 Jenkins 持续集成 ASP.NET Core 应用程序
- 第 2 天:将 ASP.Net 核心应用程序发布到 Azure 应用服务并在 Azure 上配置 Jenkins
- 第 3 天:将 Jenkins 与 Azure Active Directory 和服务主体集成
- 第 4 天:使用 Jenkins Azure Pipeline 在 Azure 上对 ASP.NET Core 应用程序进行 CI/CD。
开发运营
DevOps 是不同人员、流程和操作工具的组合。它帮助开发和运营团队提供一个共同的、相互理解的平台。它隔离并划出了开发团队停止和运营团队开始的界限。持续集成和部署的工具和技术是 DevOps 的一部分,它有助于获取提交的代码、恢复依赖项、编译应用程序、运行单元测试用例(如果有)、部署应用程序并确保它已启动并跑步。DevOps 下还有更多内容超出了本文的范围,例如监控应用程序及其相关属性。
持续集成
开发人员将代码提交到源代码管理(无论是 SVN、Git 还是任何其他源代码管理)和持续监控该源代码管理以获取新的代码副本、恢复依赖项、编译的操作/进程/工具的情况代码、运行所有单元测试、将代码与其他开发人员的代码集成、生成报告、通知团队成员并生成工件和可部署包,简单来说就是持续集成。还有更多的操作可以成为持续集成的一部分,但这是理解它的基本流程。
持续部署
持续部署是 DevOps 操作/流程/工具所关注的下一步。它帮助团队根据某些参数持续部署 CI 生成的可部署包。这些 CI 和 CD 步骤是重复的,并且取决于它们的触发器或调用者的配置方式。部署可以分阶段完成,例如,可能有代码首先需要部署在开发服务器上的阶段,然后是 QA 服务器,然后是 UAT,阶段,然后是 Prod。因此,持续部署消除了手动部署过程,并且基于某些触发器、参数和条件,代码会自动部署并在配置的服务器上运行,也是按顺序进行的。
Jenkins
Azure Web 应用服务
Azure 应用服务在 Azure 云中充当平台即服务 (PAAS)。Azure Web 应用服务使您可以轻松地在云平台上托管应用程序,并可以自由地使用工具、框架和平台自行构建和部署应用程序。它负责应用程序的自动伸缩、高可用性和负载平衡,使开发人员不必担心环境,可以专注于开发。
主题
本系列文章将介绍如何在本地开发环境中使用 Jenkins for CI 和 ASP.NET Core Web 应用程序的 CD,将 Web 应用程序发布到 Azure Web App Service,以及在 Azure 上配置 Jenkins 以实现托管应用程序的持续集成和持续部署。GitHub 将 DevOps 作为源控制存储库。我们将使用 Jenkins 创建一个管道,该管道从 GitHub 获取代码、构建代码、运行测试并部署包。每次提交位于 GitHub 上的代码时,这将是一项重复性任务。
以下是开发人员在开始之前在他们的机器上拥有的必备条件。
- Visual Studio 2017/2019。
- 已安装 Dotnet 2.1 SDK。
- Azure 订阅免费/付费。
- Java 1.5 或更高版本。
- Git账号
- 适用于 Windows 的 Git
安装Jenkins
让我们一步一步地在本地开发环境中安装并运行 Jenkins。
先决条件
下载并安装
导航到 URL – https://jenkins.io/并按照下面给出的说明进行操作。
- 单击“下载”按钮,它将显示可下载选项列表。我们将使用可下载的 Jenkins 的 Windows 版本。因此,单击 LTS 列表中的 Windows,下载应立即开始。
- 下载后,解压缩包并运行 MSI 以安装 Jenkins,按照向导的说明安装 Jenkins。
- 默认情况下,Jenkins 将安装在 localhost:8080 上。一旦安装完成。导航到 URL http://localhost:8080/将出现解锁 Jenkins 的屏幕。使用存储在文件 initialAdminPassword 中的密码解锁 Jenkins,如下图所示。
Jenkins 插件
在使用 Jenkins 之前,需要安装的插件很少。由于 Jenkins 支持许多工具、框架,因此需要将所需的工具集插入 Jenkins 以使其正常工作。我们将安装所需的插件集。最初,通过单击第一个选项“安装建议的插件”来安装所有推荐的插件。
这将需要一段时间我们为 Jenkins 安装所有基本插件。
让它运行
安装基本插件后,它会要求创建一个管理员用户。您可以提供所需的详细信息并确保记住用户名和密码。

提供详细信息并单击“保存并继续”后,您就完成了 Jenkins 的安装。要运行它,请单击“开始使用 Jenkins”。
为避免每次打开 Jenkins 时都登录,您可以转到 Jenkins 仪表板上显示的“配置全局安全性”部分。选中“允许匿名读取访问”选项。
安装自定义插件
由于我们将使用 Asp.Net 应用程序和单元测试,因此请安装支持此应用程序的相关插件。转到插件管理器并安装 MSBuild、MSTest、MSTestRunner、PowerShell、VSTestRunner 和 Git 插件(如果尚未安装)。
ASP.NET Core应用程序
我使用 ASP.Net Core MVC 应用程序 2.1 版进行演示。它是一个简单的应用程序,只显示运行应用程序的主机或容器。
下载或创建 ASP.NET Core Web 应用程序
创建任何示例 ASP.NET Core应用程序,或从此处克隆/下载已创建的应用程序。
您可以使用 git clone 命令将存储库克隆到本地驱动器的所需文件夹中。
在本地构建应用程序
让我们通过 .NET 命令在本地编译应用程序以确保它正常工作,然后我们可以使用 Jenkins 中配置的相同命令自动执行这些步骤。
- 打开 Visual Studio 的开发人员命令提示符。
- 在命令提示符下,导航到克隆解决方案文件的文件夹。键入命令“dotnet build <解决方案文件名>”。这将编译解决方案文件。
在本地运行单元测试
如果您在 Visual Studio 中打开解决方案文件,您将看到一个名为“JenkinsIntegration.Tests.csproj”的测试项目,其中包含一个测试。我们将在本地运行此测试 vis dotnet 命令并将结果记录在日志文件中。因此,通过“dotnet test <test project name> –logger:trx”命令运行其余部分,如下所示。一旦测试通过,它会说“Test Run Successful”。
您可以在测试项目目录下的“TestResults”文件夹中查看测试结果,即创建的日志文件。
使用 Jenkins 持续集成 ASP.NET Core 应用程序
我们看到我们的应用程序编译了文件并且测试也是绿色的。是时候摆脱运行命令的手动过程并自动化此构建和测试运行过程了。我们将在 Jenkins 中使用两种方法来做到这一点,即流水线方法和自由式项目方法。
管道方法
管道项目方法有助于为一组活动创建一个工作流,以按顺序或以流程图的形式运行。Jenkins 中的这个管道可以通过为我们的目标 CI 的每个阶段编写小脚本来创建,即获取源代码、编译它、运行测试等。
- 在 Jenkins 主页上,单击“创建新作业”。
- 选择项目类型为“Pipeline”并为项目指定一个有意义的名称,例如在本例中为“JenkinsPipeline”。
- 在下一个屏幕上,您需要为管道提供一个基本的顺序脚本来逐个执行阶段。例如、构建和运行测试,即我们手动完成的事情。以下是我在流水线脚本中使用的脚本,如下图所示。
pipeline { agent any environment { dotnet = 'C:\\Program Files\\dotnet\\dotnet.exe' } stages { stage('Checkout') { steps { git credentialsId: 'b92a2c28-2693-4fc1-8490-49c7db00ed8a', url: 'https://github.com/akhilmittal/Getting-Started-With-Jenkins', branch: 'master' } } stage('Build') { steps { bat 'dotnet build JenkinsIntegration\\jenkinsIntegration.sln --configuration Release' } } stage('Test') { steps { bat 'dotnet test JenkinsIntegration\\JenkinsIntegration.Tests\\JenkinsIntegration.Tests.csproj --logger:trx' } } } }
上面创建的管道脚本分为三个阶段。-
- Checkout
在这个阶段,我们提供 Git 存储库的 URL、作为 master 的分支和 git 凭据 ID。Git 凭据可以存储在 Jenkins 配置中,并且将提供可以在配置中使用的相应 id,这样您就不必一次又一次地提供凭据。 - Build
完成build后,将使用 dotnet build 命令来构建解决方案,就像我们手动执行的那样。 - 测试
代码编译完成后,它会通过 dotnet test 命令运行测试。
- Checkout
因此,我们只需以脚本的形式配置我们的手动命令。在环境部分,我们提供了 dotnet exe 的路径,因为我们在脚本中使用它,Jenkins 应该知道 exe 必须从哪里运行。 -
- 我们还需要配置,什么时候应该触发我们的管道构建。因此,在“Build Triggers”部分,勾选 Poll SCM 和 GitHub hook trigger 两个选项,如下图所示。在这里,我们可以设置 Jenkins 检查 GitHub 上的代码并执行构建的时间间隔,并将时间表提供为“* * * * *”,这意味着继续检查 Git 存储库,一旦提交/签入完成,触发构建过程。如果我们从 Jenkins 仪表板开始,我们也可以手动触发构建。
- 转到 Jenkins 主页,我们会看到在那里创建了我们的工作。右侧是触发构建的图标。现在,手动触发构建以检查工作流是否真的有效。
- 一旦构建触发器完成执行,它就会在左侧面板上显示状态。您可以在执行时单击左侧的构建以了解构建的实时状态或何时完成。单击构建,我们会看到我们的管道标题(如 Checkout、Build 和“UnitTests”)按顺序列出,告诉每个进程花费的时间。由于所有进程都成功运行,包括测试。您还可以通过单击“UnitTests”上的日志完成过程来检查我们打算在运行测试后创建的日志文件,如下所示。
以下是通过测试生成的日志文件。
Freestyle项目方法
Freestyle 项目是另一种做同样事情的方法,除了您不必在这里编写脚本并提供所需的配置。让我们一步一步地检查一下。
- 再次,在仪表板上,单击“创建新工作”。
- 为项目提供一个名称,例如“JenkinsFreeStyle”,然后选择 Freestyle 项目作为项目类型。
- 在下一个屏幕上,在“源代码管理”下,选择 Git(因为我们使用的是 Git)并提供 Git 凭据。提供分支为“*/master”。
- 在“构建触发器”中,我们将再次使用上一节中解释的“* * * * *”。
- 在 Build 部分,我们现在将提供要按顺序执行的 dotnet 命令,用于编译和运行测试,如下所示。
- 在构建后操作中,让我们提供我们打算创建的测试结果文件的名称。在 Build 部分的 dotnet test 命令中引用相同的名称。
- 现在保存配置,转到主页,并运行创建的触发器。现在一旦构建完成,检查新触发构建的构建执行。我们看到构建被执行,并且测试通过。您可以通过单击“最新测试结果”链接来查看测试结果。
- 该链接导航到测试方法并表示它已通过。
结论
因此,我们探索了 Jenkins 以及它如何与我们本地的 .net core应用程序无缝协作。这是配置较少且只有一个简单测试的小型示例应用程序。在某些情况下,您的构建可能会失败,或者测试未通过。在这种情况下,请耐心等待并尝试检查日志以了解导致失败的原因并尝试修复该问题。在下一篇文章中,我们将看到如何将 Asp.NET Core 应用程序发布到 Azure 应用服务。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!