65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Jenkins 在 Azure Web App 上持续集成和部署 ASP.NET Core 应用程序 – Day 1

starIconstarIconstarIconstarIconstarIcon

5.00/5 (8投票s)

2019 年 11 月 27 日

CPOL

12分钟阅读

viewsIcon

23319

downloadIcon

222

本文将解释 CI/CD、Jenkins 的概念,Jenkins 的入门,以及将 ASP.NET Core 应用程序本地集成和部署到 Azure 服务。我们还将涵盖创建 Azure 服务、创建 Azure 服务主体、在 Azure 上配置 Jenkins 等主题。

引言

DevOps,顾名思义,是开发和运营的集成。它是一种新的自动化流,将软件开发及其生命周期提升到一个新的水平,从而减少了许多手动和易出错的情况。它为加速交付增加了价值,并提高了软件质量。在当今时代,如果我们放眼四周,会发现许多建立在 DevOps 之上的工具和技术。其中之一就是 Jenkins。Jenkins 并不新,但它无缝且易于集成到任何系统的机制使其更加健壮和可靠。过去,集成和部署是一项繁琐的任务,因为它都是手动完成的。拥有这些工具可以帮助开发人员,事实上是整个团队,忘记集成和部署,因为他们知道有一个自动化流程在进行。本文将详细介绍使用 Jenkins 进行持续集成和部署的主题。本文将解释 CI/CD、Jenkins 的概念,Jenkins 的入门,以及将 ASP.NET Core 应用程序本地集成和部署到 Azure 服务。在进行过程中,我们还将涵盖创建 Azure 服务、创建 Azure 服务主体、在 Azure 上配置 Jenkins 等主题。

路线图

以下是我们为全面学习使用 Jenkins 在 Azure Web App 上持续集成和部署 ASP.NET Core 应用程序的端到端开发和配置所遵循的路线图。

DevOps

DevOps 是不同的人、流程和运营工具的组合。它通过提供一个通用、相互理解的平台来帮助开发和运营团队。它区分并划定了开发团队在哪里停止,运营团队在哪里开始。用于持续集成和部署的工具和技术是 DevOps 的一部分,它们有助于获取已提交的代码、恢复依赖项、编译应用程序、运行单元测试(如果有)、部署应用程序并确保其正常运行。DevOps 还涵盖许多其他内容,但超出了本文的范围,例如应用程序及其相关属性的监控。

持续集成

开发人员将代码提交到源代码管理(无论是 SVN、Git 还是任何其他源代码管理)后,操作/进程/工具会持续监视该源代码管理,以获取最新代码副本、恢复依赖项、编译代码、运行所有单元测试、将代码与其他开发人员的代码集成、生成报告、通知团队成员并生成工件和可部署包。简而言之,这个过程被称为持续集成。CI 中可以包含更多操作,但这只是理解 CI 的基本流程。

持续部署

持续部署是 DevOps 操作/进程/工具持续追求的下一步。它有助于团队根据某些参数持续部署 CI 生成的可部署包。这些 CI 和 CD 步骤是重复的,并取决于它们的触发器或调用者的配置方式。部署可以分阶段进行,例如,可能有需要先将代码部署到开发服务器,然后是 QA 服务器,然后是 UAT、Stage,最后是 Prod 的阶段。因此,持续部署消除了手动部署过程,并根据某些触发器、参数和条件,代码会自动按顺序分阶段部署并运行在配置的服务器上。

Jenkins

Jenkins 作为一个用于自动化的开源工具,有助于团队/开发人员持续构建和测试软件代码。它使开发人员能够轻松地进行集成和测试代码,而无需手动干预。该工具可以设置为创建部署管道,该管道包括每次代码提交时的持续集成、持续测试构建、发布工件和文档以及部署代码。Jenkins 可以根据部署需求配置在服务器上,例如开发、暂存或生产服务器。

Azure Web App Service

Azure App Services 在 Azure 云中充当平台即服务 (PAAS)。Azure Web App Service 使在云平台上托管应用程序变得容易,同时可以根据需要自由地使用工具、框架和平台来构建和部署应用程序。它负责应用程序的自动缩放、高可用性和负载均衡,以便开发人员不必担心环境,而可以专注于开发。

主题

本文系列将通过 Jenkins 说明如何在本地开发环境中对 ASP.NET Core Web 应用程序进行 CI 和 CD,将 Web 应用程序发布到 Azure Web App Service,并在 Azure 上配置 Jenkins 以实现托管应用程序的持续集成和持续部署。GitHub 将作为 DevOps 的源代码控制存储库。我们将使用 Jenkins 创建一个管道,该管道从 GitHub 获取代码、构建代码、运行测试并部署包。每次提交到 GitHub 上的代码时,这将是一项重复性任务。

必备组件

以下是开发人员开始之前在其计算机上应具备的先决条件

  1. Visual Studio 2017/2019
  2. 已安装 Dotnet 2.1 SDK
  3. Azure 订阅(免费/付费)
  4. Java 1.5 或更高版本
  5. Git 帐户
  6. Git for Windows

安装 Jenkins

让我们逐步在本地开发环境中安装并运行 Jenkins。

必备组件

Jenkins 是一个 Java 应用程序,需要 Java Runtime 才能运行。因此,请在开发机器上安装 Java 1.5 SDK 或其更高版本。在此处下载最新版本:https://www.java.com/en/

下载并安装

导航到 URL:https://jenkins.io/ 并按照下面提供的说明进行操作。

  1. 单击“下载”按钮,它将显示可下载选项列表。我们将使用 Windows 版本的 Jenkins 可下载文件。因此,单击 LTS 列表中的 Windows,下载将立即开始。

  2. 下载完成后,解压缩包并运行 MSI 安装 Jenkins,按照安装向导中的说明进行操作并安装 Jenkins。

  3. Jenkins 将默认安装在 localhost:8080 上。安装完成后,导航到 URL https://: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 应用程序,或从 https://github.com/akhilmittal/Getting-Started-With-Jenkins 克隆/下载已创建的应用程序。

您可以使用 git clone 命令将存储库克隆到本地驱动器的所需文件夹中。

在本地构建应用程序

让我们通过 dotnet 命令在本地编译应用程序,以确保它正常工作,稍后我们可以使用 Jenkins 中配置的相同命令来自动化这些步骤。

  1. 打开 Visual Studio 的开发人员命令提示符。

  2. 在命令提示符下,导航到克隆了解决方案文件的文件夹。键入命令“dotnet build <solution file name>”。这将编译解决方案文件。

在本地运行单元测试

如果您在 Visual Studio 中打开解决方案文件,您会发现有一个名为“JenkinsIntegration.Tests.csproj”的测试项目,其中包含一个测试。我们将通过 dotnet 命令在本地运行此测试并将结果记录到日志文件中。因此,运行其余命令,使用“dotnet test <test project name> --logger:trx”命令,如下所示。测试通过后,它将显示“测试运行成功”。

您可以检查测试结果,即在测试项目目录下的“TestResults”文件夹中创建的日志文件。

使用 Jenkins 持续集成 ASP.NET Core 应用程序

我们看到我们的应用程序编译了文件,并且测试也通过了。是时候摆脱运行命令的手动过程,并自动化此构建和测试运行过程了。我们将通过 Jenkins 中的两种方法来实现这一点,即 Pipeline 方法和 Freestyle 项目方法。

Pipeline 方法

Pipeline 项目方法有助于创建一系列活动的流程,这些活动按顺序或以流程图的形式运行。Jenkins 中的此 Pipeline 可以通过为我们目标 CI 的每个阶段编写小型脚本来创建,即获取源代码、编译它、运行测试等。

  1. 在 Jenkins 主页上,单击“创建新任务”。

  2. 选择项目类型为“Pipeline”,并为项目赋予有意义的名称,例如在此情况下为“JenkinsPipeline”。

  3. 在下一个屏幕上,您需要提供一个基本的顺序脚本,供 Pipeline 按顺序执行各个阶段。例如,签出、构建和运行测试,即我们手动完成的操作。以下是我在 Pipeline 脚本中使用的脚本,如下图所示。
    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'
       }
      }
     }
    }

上面创建的 Pipeline 脚本有三个阶段。

  1. Checkout:在此阶段,我们提供 Git 存储库的 URL、分支(master)和 git 凭据 ID。Git 凭据可以存储在 Jenkins 配置中,并提供相应的 ID,该 ID 可用于配置,这样您就不必一遍又一遍地提供凭据。
  2. Build:签出完成后,我们将使用 dotnet build 命令来构建解决方案,就像我们手动做的那样。
  3. Test:代码编译完成后,使用 dotnet test 命令运行测试。

因此,我们只是将手动命令配置为脚本形式。在环境部分,我们提供了 dotnet EXE 的路径,因为我们在脚本中使用它,并且 Jenkins 应该知道在哪里运行 EXE。

  1. 我们还需要配置何时触发我们的 Pipeline 构建。因此,在“构建触发器”部分,选中轮询 SCM 和 GitHub hook 触发器这两个选项,如下图所示。在这里,我们可以设置 Jenkins 检查 GitHub 上的代码并执行构建的间隔,并将计划设置为“* * * * *”,这意味着不断检查 Git 存储库,并在每次提交/签入后立即触发构建过程。如果从 Jenkins 仪表板进行操作,我们也可以手动触发构建。

  2. 转到 Jenkins 主页,我们会看到我们创建的作业在那里,最右侧是触发构建的图标。现在,手动触发构建以检查我们的工作流程是否真的有效。

  3. 构建触发器执行完成后,它会在左侧面板上显示状态。您可以在构建执行期间单击左侧的构建以了解构建的实时状态或完成情况。单击构建,我们看到我们的 Pipeline 标题,如 Checkout、Build 和“UnitTests”,按顺序排列,显示每个过程所花费的时间。所有过程都成功运行,包括测试。您还可以通过单击“UnitTests”完成过程上的日志,查看运行测试后我们打算创建的日志文件,如下图所示。

以下是成功通过测试后生成的日志文件。

Freestyle 项目方法

Freestyle 项目是完成相同任务的另一种方法,除了您不必在此处编写脚本,而是提供所需的配置。让我们一步一步地检查。

  1. 同样,在仪表板上,单击“创建新任务”。

  2. 为项目提供一个名称,例如“JenkinsFreeStyle”,并选择Freestyle项目作为项目类型。

  3. 在下一个屏幕上,在“源代码管理”下,选择 Git(因为我们正在使用 Git)并提供 Git 凭据。将分支提供为“*/master”。

  4. 在“构建触发器”中,我们将再次使用在上一个部分中解释过的“* * * * *”。

  5. 构建部分,我们将按照如下所示按顺序提供要执行的 dotnet 命令,用于编译和运行测试。

  6. 在构建后操作中,让我们提供我们要创建的测试结果文件的名称。在构建部分的 dotnet test 命令中引用相同的名称。

  7. 现在,保存配置,转到主页并运行创建的触发器。现在,构建完成后,检查新触发构建的构建执行,我们会看到构建已执行,并且测试已通过。您可以单击“最新测试结果”链接来检查测试结果。

  8. 该链接导航到测试方法并显示其已通过。

结论

因此,我们探讨了 Jenkins 在本地与我们的 .NET Core 应用程序无缝协作。这是一个小型示例应用程序,配置很少,只有一个简单的测试。也可能出现构建失败或测试不通过的情况。在这种情况下,请保持耐心,尝试检查日志以了解导致失败的原因并尝试修复它。在下一篇文章中,我们将介绍如何将 ASP.NET Core 应用程序发布到 Azure App Service。

历史

  • 2019 年 11 月 27 日:初始版本
© . All rights reserved.