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

使用 Jenkins 在 Azure Web 应用上持续集成和部署 ASP.NET Core 应用程序 – 第 4 天

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2019 年 11 月 28 日

CPOL

6分钟阅读

viewsIcon

12825

downloadIcon

107

在本篇文章中,我们将学习使用 Jenkins Azure Pipeline 在 Azure 上进行 ASP.NET Core 应用程序的 CI/CD。

主题

在本系列的第一篇文章中,我们学习了相关的概念、术语、技术,安装 Jenkins,创建 ASP.NET Core 应用程序,并通过两种方法(pipeline 方法和 freestyle project 方法)使用 Jenkins 对 ASP.NET Core 应用程序进行持续集成。在第二篇文章中,我们将 ASP.NET Core 应用程序发布到 Azure App Service 并配置了 Jenkins on Azure。在本系列第三篇文章中,我们重点介绍了 Azure Active Directory 和 Service Principal,以及如何将 Jenkins 与 Azure Service Principal 集成。

在本系列的最后一篇文章中,我们将学习使用 Jenkins 实现 ASP.NET Core 应用程序在 Azure 上的 CI/CD

路线图

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

以下是我们将在 Jenkins 上使用 ASP.NET Core 应用程序在 Azure Web 应用上进行持续集成和部署(CI/CD)的完整学习路线图。

Jenkins

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

必备组件

在开始阅读本文之前,请先阅读本系列的头两篇文章。

开发者开始之前,机器上需要具备以下先决条件。

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

使用 Jenkins Azure Pipeline 在 Azure 上进行 ASP.NET Core 应用程序的 CI/CD

本节将介绍如何启用应用程序的持续集成和部署。所有必需的设置都已完成。我们只需要配置 Jenkins 来实现这一目标。我们将通过 pipeline 项目方法来完成。

创建新的 Pipeline 作业

在 Jenkins 主页上,创建一个新作业。

为 pipeline 项目起一个有意义的名称(例如:Jenkins-on-Azure),然后选择“Pipeline”作为项目类型。

添加参数

在“General”选项卡中,勾选“This project is parameterized”选项。我们将在此处添加一些参数。

添加三个字符串参数:git_repo 用于提供 git 存储库的 URL,res_group 用于提供资源组的名称,以及 JenkinsIntegration,这将是我们 Web 应用程序项目的名称。您可以在此处提供默认值,否则在运行构建时会要求您提供这些值。

添加一个凭证参数,名为 azure_cred_id,并选择凭证类型为“Microsoft Azure Service Principal”,默认值将是我们之前创建的服务主体的 ID。

添加 Pipeline 脚本

在 Pipeline 脚本部分,提供用于 git checkout、构建、发布和部署的 pipeline 脚本。

node {
    stage('Checkout git repo') {
      git branch: 'master', url: params.git_repo
    }
    stage('build and publish') {
        sh(script: "dotnet publish JenkinsIntegration -c Release ", returnStdout: true)
    }
    stage('deploy') {
        azureWebAppPublish azureCredentialsId: params.azure_cred_id,
            resourceGroup: params.res_group, appName: params.JenkinsIntegration, 
            sourceDirectory: 
                "JenkinsIntegration/JenkinsIntegration/bin/Release/netcoreapp2.1/publish/"
        }
}

运行构建

保存配置并转到主页。您可以手动触发构建,由于我们没有提供参数的默认值,它会要求您提供值。提供值后,单击“Build”按钮。

我们期望一个干净成功的构建,但我们在下方看到构建失败了。它显示的错误原因是,在发布时找不到“dotnet”命令。由于 Jenkins 在 Linux 工作空间下运行。我们的 Linux 服务器应该安装了 dotnet。

安装 Dotnet

让我们在 Linux 上安装 dotnet SDK 2.1。返回运行隧道所在的终端,然后逐个运行以下命令来注册 Microsoft 密钥和提要。

  • wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  • sudo dpkg -i packages-microsoft-prod.deb

现在运行以下命令来安装 .NET Core 2.1 SDK。

  • sudo apt-get install apt-transport-https
  • sudo apt-get update
  • sudo apt-get install dotnet-sdk-2.1

这将会在 Linux 服务器上安装 .NET Core 2.1 SDK。

计划构建

转到 Jenkins 主页,再次尝试触发构建。

我们看到构建成功了。

构建自动轮询

让我们为自动轮询设置构建触发器,即一旦在 git 存储库中提交了代码,构建就会触发。勾选 Poll SCM,调度值应为“* * * * *”。

持续部署

打开浏览器,访问 Azure 上的已部署应用程序。我们看到应用程序正在运行。

现在,为了检查自动构建是否触发,我们对 cshtml 文件做一些更改。因此,我在 Index.cshtml 文件中的文本从“Getting Started with Jenkins”更改为“Getting Started with Jenkins on Azure”。

并将应用程序的版本更改为 2.0。

提交代码并推送到 origin。

我们看到,一旦代码被推送到存储库,在一秒钟内,构建就会自动触发。

检查构建是否成功。

返回浏览器,刷新它,我们看到更改已反映在此处,这意味着我们的应用程序已自动部署到 Azure。

结论

在本系列文章中,我们学习了 Jenkins 的用途以及它在我们的软件开发生命周期中有何用处。我们学习了如何使用 Jenkins 对本地开发环境中的 ASP.NET Core Web 应用程序进行 CI 和 CD,将 Web 应用程序发布到 Azure Web App Service,以及配置 Jenkins on Azure 以实现托管应用程序的持续集成和持续部署。Jenkins 是一个庞大的主题,在使用过程中,需要耐心来完成各种设置,但一旦设置完成,它就能无缝地工作。

历史

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