目录
介绍
路线图
DevOps
持续集成
持续部署
Jenkins
Azure Web App服务
主题
先决条件
安装Jenkins
先决条件
下载并安装
Jenkins插件
让它运行
安装自定义插件
ASP.NET Core应用程序
下载或创建ASP.NET Core Web应用程序
在本地构建应用程序
在本地运行单元测试
使用Jenkins持续集成ASP.NET Core应用程序
管道(Pipeline)方法
自由式项目(Freestyle project)方法
结论
介绍正如所说的DevOps是开发和运营的集成。它是一种新的自动化流,它将软件开发及其生命周期提高到了一个新的水平,从而减少了很多手动操作和易于发生风险/错误的情况。它为加速交付增加了价值,并用于提高软件质量。在当今时代,如果我们四处看看,我们会看到许多利用DevOps构建的工具和技术。Jenkins就是其中之一。Jenkins并不是新的,但其无缝、简便的集成到任何系统的方法使它变得更加强大和可靠。过去,集成和部署是手动完成的繁琐任务的日子已经一去不复返了。拥有这些工具有助于开发人员,事实上,整个团队,忘记集成和部署,因为他们知道有一个自动化的过程来处理这个问题。本文将详细介绍使用Jenkins进行持续集成和部署的主题。本文将解释CI/CD的概念,Jenkins,Jenkins入门,将ASP.NET Core应用程序集成并部署到本地以及Azure服务。在学习过程中,我们还将涵盖诸如创建Azure服务,创建Azure服务主体,在Azure上配置Jenkins之类的主题。
路线图以下是我们将遵循的路线图,以完全了解使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)的端到端开发和配置。
- 第1天:使用Jenkins持续集成ASP.NET Core应用程序
- 第2天:将ASP.NET Core应用程序发布到Azure应用服务并在Azure上配置Jenkins
- 第3天:将Jenkins与Azure Active Directory和Service Principal集成
- 第4天:使用Jenkins Azure Pipeline在Azure上的ASP.NET Core应用程序的CI / CD
DevOps是不同人员、流程和操作工具的组合。它可以帮助开发和运营团队提供一个通用的、相互理解的平台。它隔离并划定了开发团队在哪里停止以及运营团队在哪里开始的界限。用于持续集成和部署的工具和技术是DevOps的一部分,可帮助获取已提交的代码,还原依赖关系,编译应用程序,运行单元测试用例(如果有),部署应用程序并确保已启动并运行。DevOps包含很多功能,但超出了本文的范围,例如监视应用程序及其相关属性。
持续集成开发人员将代码提交给源代码控制(无论是SVN,Git还是任何其他源代码控制),并且操作/过程/工具不断监视该源代码控制以获取代码的新副本,还原依赖关系,进行编译的情况代码,运行所有单元测试,将代码与其他开发人员的代码集成,生成报告,通知团队成员并生成工件(artifacts)和可部署的包,简称为持续集成。CI可以包含更多的操作,但这是了解CI的基本流程。
持续部署持续部署是DevOps操作/过程/工具不断查找的下一步。它可以帮助团队根据某些参数来连续部署CI生成的可部署软件包。这些CI和CD步骤是重复性的,并取决于如何配置其触发器或调用者。部署可以分阶段进行,例如,在某些阶段中,首先需要将代码部署在开发服务器上,然后是QA服务器,然后是UAT,然后是Prod。连续部署从而消除了手动部署过程,并且基于某些触发器,参数和条件,代码自动部署并在配置的服务器上运行,并且也可以在顺序阶段运行。
JenkinsJenkins是自动化的开源工具,可帮助团队/开发人员持续构建和测试软件代码。它使开发人员无需人工干预即可轻松集成和测试代码。可以设置该工具以创建一个部署管道,该管道包括在每次代码提交时对代码进行持续集成,不断地测试构建,发布工件和文档以及部署代码。可以在服务器上配置Jenkins,根据部署需要将其配置为开发、暂存或生产。
Azure Web App服务Azure App Services在Azure云中充当平台即服务(PAAS)。Azure Web App Service使得可以轻松地将应用程序托管在云平台上,并可以根据需要使用工具、框架和平台自由地构建、部署应用程序。它负责应用程序的自动缩放,高可用性和负载平衡,因此开发人员不必担心环境,而可以专注于开发。
主题本系列文章将说明如何在本地开发环境中使用Jenkins for CI和CD的ASP.NET Core Web应用程序,将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是一个Java应用程序,需要Java Runtime才能运行。因此,在开发计算机上安装Java 1.5 SDK或更高版本。在此处下载最新版本。
下载并安装导航至URL:https://jenkins.io/,然后按照以下说明进行操作:
1、单击下载按钮,它将显示可供下载的选项列表。我们将使用可下载的Windows版本的Jenkins。因此,在LTS列表中单击Windows,下载应立即开始。
2、下载完成后,解压缩软件包并运行MSI以安装Jenkins,然后按照向导的说明安装Jenkins。
3、Jenkins将默认安装在localhost:8080上。安装完成后。导航到URL http://localhost:8080/,屏幕将显示为解锁Jenkins。使用存储在文件initialAdminPassword中的密码来解锁Jenkins,如下图所示:
在使用Jenkins之前,需要安装一些插件。由于Jenkins支持许多工具和框架,因此需要将所需的工具集插入Jenkins才能使工作正常进行。我们将安装所需的插件集。最初,请安装所有推荐的工具。因此,单击第一个选项,即“安装建议的插件”。
这将花费一些时间并安装Jenkins的所有基本插件。
一旦安装了基本插件,它将要求创建一个Admin用户。您可以提供所需的详细信息,并确保至少记住用户名和密码。
一旦提供了详细信息并单击“Save and Continue”,就完成了Jenkins的安装并使其运行。点击“开始使用Jenkins ”。
为了避免每次打开Jenkins时都登录,可以转到Jenkins仪表板上显示的“配置全局安全性 ”部分,并选中“允许匿名读取访问”选项。
因为我们将使用ASP.NET应用程序和单元测试。因此,请安装支持该应用程序的相关插件。如果尚未安装,请转到插件管理器并安装MSBuild,MSTest,MSTestRunner,PowerShell,VSTestRunner和Git插件。
我已使用ASP.NET Core MVC应用程序2.1版进行演示。这是一个简单的应用程序,仅显示了运行该应用程序的主机或容器。
下载或创建ASP.NET Core Web应用程序创建任何示例ASP.NET Core应用程序,或从https://github.com/akhilmittal/Getting-Started-With-Jenkins克隆/下载已创建的应用程序。
您可以使用git clone命令将存储库克隆到本地驱动器的所需文件夹中。
让我们通过dotnet命令在本地编译应用程序,以确保它可以正常运行,然后,我们可以使用在Jenkins中配置的同一命令来自动执行这些步骤。
1、打开Visual Studio的开发人员命令提示符。
2、在命令提示符下,导航到克隆解决方案文件的文件夹。键入命令“dotnet build ”。这将编译解决方案文件。
如果在Visual Studio中打开解决方案文件,则会看到一个名为“JenkinsIntegration.Tests.csproj”的测试项目,其中包含一个测试。我们将在本地运行此test vis dotnet命令,并将结果记录在日志文件中。因此,如下所示,通过“dotnet test --logger:trx”命令运行其余部分。测试通过后,将显示“Test Run Success”。
您可以检查测试结果,即在测试项目目录下的“TestResults”文件夹中创建的日志文件。
我们看到我们的应用程序编译了文件,并且测试也呈绿色。现在应该摆脱运行命令的手动过程,并使此构建和测试运行过程自动化。我们将在Jenkins中使用两种方法来完成此任务,即管道(Pipeline)方法和自由式项目(Freestyle project)方法。
管道(Pipeline)方法管道项目方法有助于为一组活动创建工作流,以按顺序或以流程图的形式运行。可以通过针对目标CI的每个阶段编写小型脚本来创建Jenkins中的此管道,即获取源代码,对其进行编译,运行测试等。
1、在Jenkins主页上,单击“创建新作业”。
2、选择项目类型为“Pipeline”,并为项目指定一个有意义的名称,例如本例中的“JenkinsPipeline”。
3、在下一个屏幕上,您需要为管道提供一个基本的顺序脚本,以逐个执行阶段。例如,签出、构建和运行测试,即我们手动执行的操作。以下是在流水线脚本中使用的脚本,如下图所示。
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'
}
}
}
}
上面创建的管道脚本分为三个阶段。
- 签出:在此阶段,我们提供Git信息库的URL,分支作为master和git凭证ID。Git凭证可以存储在Jenkins配置中,并且将提供一个可以在配置中使用的对应ID,因此您不必一次又一次提供凭证。
- 构建:签出完成后,像我们手动执行的那样,使用dotnet build命令构建解决方案。
- 测试:编译代码后,请通过dotnet test命令运行测试。
因此,我们仅以脚本形式配置了手动命令。在环境部分,我们提供了dotnet EXE的路径,因为我们在脚本中使用了它,并且Jenkins应该知道必须从何处运行EXE。
1、我们还需要配置何时触发管道构建。因此,在“构建触发器”部分中,检查Poll SCM和GitHub钩子触发器的两个选项,如下图所示。在这里,我们可以设置Jenkins在GitHub上检查代码并执行构建的时间间隔,并以“ * * * * *”的形式提供时间表,这意味着继续检查Git存储库以及尽快进行提交/签入完成后,触发构建过程。如果我们从Jenkins仪表板出发,我们也可以手动触发构建。
2、转到Jenkins主页,我们看到在此处创建了作业,并且在最右侧是触发构建的图标。现在,手动触发构建以检查我们的工作流程是否真的有效。
3、构建触发器完成执行后,它将在左侧面板上显示状态。您可以在执行时单击左侧的构建,以了解构建的实时状态或完成时的状态。单击构建,我们看到我们的流水线标题(如Checkout,Build和“UnitTests”)以顺序方式列出,告诉每个过程花费的时间。所有过程都成功运行,包括测试。您还可以通过单击”UnitTests“完成后的日志来检查运行测试后我们打算创建的日志文件,如下所示。
以下是通过测试生成的日志文件。
自由式项目是执行相同操作的另一种方法,只是您不必在此处编写脚本并提供所需的配置。让我们逐步检查一下。
1、再次,在仪表板上,单击“创建新作业”。
2、为项目提供名称,例如“JenkinsFreeStyle”,然后选择Freestyle项目作为项目类型。
3、在下一个屏幕的“Source Code Management”下,选择Git(因为我们正在使用Git)并提供Git凭据。提供分支为“* / master”。
4、在“构建触发器”中,我们将再次使用“ * * * * *”,这将在上一节中进行说明。
5、在“构建”部分,我们现在将提供dotnet命令,以按顺序执行这些命令,以编译和运行测试,如下所示:
6、在构建后操作中,让我们提供要创建的测试结果文件的名称。在“构建”部分的dotnet测试命令中引用相同的名称。
7、现在,保存配置,转到主页并运行创建的触发器。现在,一旦构建完成,请检查新触发的构建的构建执行,我们将看到该构建已执行,并且测试已通过。您可以通过单击“最新测试结果”链接来检查测试结果。
8、该链接导航到测试方法并表示已通过。
因此,我们探索了Jenkins与我们本地的.NET Core应用程序无缝协作的情况。这是具有少量配置和仅一个简单测试的小型示例应用程序。在某些情况下,您的构建可能会失败,或者测试无法通过。在这种情况下,请耐心等待,并尝试检查日志以了解造成故障的原因并尝试解决该问题。在下一篇文章中,我们将看到如何将ASP.NET Core应用程序发布到Azure App Service。