使用Jenkins实现项目持续集成部署

十多年前,敏捷开发人员开始拥抱并促进测试驱动的开发和持续集成(CI)。利用这些技术,只要开发人员将源代码检查到源存储库中,我们就可以自动构建源代码,执行详尽的单元测试套件以确保应用程序正常运行。许多测试驱动的开发人员也开始在辅助CI流程中进行集成测试和性能测试。

通过持续集成,我们可以比前几年更快地发现错误并更快地发布代码。毫不夸张地说,CI驯服了构建和部署周期的“构建”方面。如今,许多开发团队已经从CI转移到CD,CD代表持续交付或持续部署。无论使用哪种名称,CD都是将软件从代码检入转移到暂存甚至生产部署的过程。

这部分开源Java项目引入了与领先的CI / CD自动化服务器Jenkins的持续集成。我们将首先概述CI和CD过程,然后使用Maven和Jenkins设置Java Web项目。这里,将学习如何使用JUnit在Jenkins中构建和对项目进行单元测试,以及如何对构建失败进行故障排除。

CI / CD简介

在连续的集成过程中,可以自动签出,构建,测试各种方式将已检入源代码存储库中的代码,然后发布到存储库中。为了使连续集成正常工作,您需要像Jenkins这样的CI服务器,它可以监视源代码存储库中的新更改并以可配置的方式做出响应。

以使用Maven构建的Java应用程序为例。在检测到代码更改时,您的CI服务器可以通过执行来响应mvn clean install。在典型的Maven构建配置中,它将作为构建命令的一部分执行一组新的单元测试。在构建源代码时,服务器可以执行任意数量的其他操作:

  • 提交的代码通过单元测试后,将功能分支合并回主分支或主分支。

  • 执行静态代码分析,例如代码覆盖率,代码复杂性,常见错误检查等。

  • 将构建工件发布到存储库,例如Artifactory或Sonatype Nexus

  • 将您的应用程序部署到集成测试环境

  • 执行集成测试

  • 将您的应用程序部署到性能测试环境

  • 对您的应用程序执行负载测试

  • 将您的应用程序部署到用户验收测试环境(UAT)

  • 将您的应用程序部署到生产环境

这些步骤是您可以在CI / CD流程中执行的所有类型的活动。CI通常包含开发生命周期的构建和测试阶段,而CD则将该过程扩展到将构建工件部署到服务器以进行测试。在某些环境中,CD一直到生产。

连续集成通常使用Jenkins,Bamboo或TeamCity之类的工具完成,该工具将构建步骤编排到集成管道中。Jenkins可能是最受欢迎的CI / CD产品,它与Docker搭配得很好。

Jenkins简介

Jenkins是一个基于Java开发的开源软件项目,用于支持构建、部署和自动化任何项目。在实际开发中,通常将他作为项目的持续集成、部署工具来使用,其使用场景可以通过一张图来表达,如图所示。

在图中,Jenkins进行项目集成管理的流程如下。

(1)开发人员将更改后的代码提交到代码仓库中(如GitHub);

(2)持续集成工具Jenkins会定期(或人工手动)从代码仓库拉取指定项目;

(3)Jenkins工具会根据具体配置,自动化打包、构建镜像、推送镜像,并最终生成Docker容器来启动服务,形成对应的测试环境;

(4)测试人员会在对应的测试环境下测试Jenkins自动化集成、部署的服务;

(5)当项目测试成功后,可以使用Jenkins工具将测试成功的项目自动构建到发布环境下,也可以人工手动部署到发布环境下。

当使用Jenkins后,无需人工操作就可以自动化完成项目的持续集成和部署,这对于实际项目开发来说,有着极大的好处。

Jenkins安装

Jenkins官网提供了多种安装方式,包括基于Java的war包,Linux、MacOS和Windows系统等方式。这里我们选择比较通用的war包方式为例,在集群管理节点manager1机器上安装一个Jenkins工具(由于Jenkins是由java开发的,所以在安装Jenkins之前要确保已安装了JDK并配置了系统环境),具体步骤如下。

1.下载Jenkins

在浏览器中输入Jenkins官网地址https://jenkins.io/download/访问其下载页面,选中页面中Long-term Support (LTS,长期支持)版本最下方的Generic java package(.war),进行Jenkins的war包下载,如图所示。

2.启动Jenkins服务

将下载好的jenkins.war放到manager1机器中的某个目录下,直接使用如下指令即可启动Jenkins服务。

$ java -jar jenkins.war --httpPort=49001

执行上述指令后,就会在Linux系统上通过war包的方式启动Jenkins服务。

需要注意的是,Jenkins内部默认配置的端口是8080(这与开发中很多端口有冲突),所以我们在启动Jenkins服务时,使用--httpPort参数指定了服务启动的端口为49001。

3.Jenkins初始化安装

通过浏览器访问地址http://192.168.197.143:49001就可以正式访问Jenkins服务,在首次安装访问Jenkins时,会涉及到Jenkins的初始化安装,具体说明如下。

(1)初始化认证密码

在Jenkins首次启动并访问时需要一个认证密码,该密码在Jenkins初次启动时会自动生成并存储在jenkins目录的某个文件中(初始化页面会有提示,本示例中的初始化密码存储位置在/home/manager1/.jenkins/secrets/initialAdminPassword文件中),输入指定密码后,单击右下角的“Continue”按钮即可,其效果如图所示。

(2)初始化插件安装

输入初始化认证密码后,会进入一个Jenkins插件定制安装界面,这也是首次启动访问Jenkins时会出现的页面,页面中会提供Install suggested plugins(安装建议插件)和Select plugins to install(自行选择插件安装)两种方式,如图所示。

通常情况下,都会选择左侧的Install suggested plugins进行初始化插件安装,然后Jenkins服务就会进入插件安装过程。

(3)创建管理员用户

当完成上一步初始化插件安装后,页面会自动跳转到一个Create First Admin User(创建管理员用户)的页面,需要输入管理员信息,其效果如图所示。

在该页面编辑好管理员信息后,单击右下角的“Save and Finish”按钮,就完成了Jenkins的初始化操作,然后在后续页面中单击“Starg using Jenkins”按钮就可以正式进入Jenkins主页面,其效果如图所示。

到达该主页面后,就表示Jenkins安装及初始化完毕。

10.1.1 Jenkins的集成插件配置

Jenkins安装完成后,如果想要完成项目的自动化持续集成和部署工作,那么就需要针对与项目有关的软件进行安装和配置,该配置过程具体如下。

1.安装Maven插件

因为我们之前创建的微服务是Maven项目,在使用Jenkins时也需要创建一个Maven项目进行持续集成,所以这里需要配置Maven插件。

依次单击主页面的“系统管理”à“插件管理”à“可选插件”面板,然后在右侧搜索框输入“Maven Integration plugin”关键字进行搜索。搜索出结果后,选中该插件,并单击下方的“直接安装”按钮即可进行Maven插件安装,其效果如图所示。

2.系统全局插件配置

完成所需插件的安装后,必须在Jenkins上进行全局插件配置,这样才能让Jenkins与其他软件关联工作,这里配置的全局插件主要有JDK(项目编译工具)、Git(代码仓库GitHub管理工具)、Maven(项目打包工具)和Docker(项目部署工具)。

依次单击主页面的“系统管理”=>“ Global Tool Configuration”面板,进入全局插件配置页面,然后根据整个项目从拉取代码到部署服务所需要的工具进行配置,各个插件工具的配置效果分别如图所示。

需要说明的是,由于Jenkins中对Git已经有了默认配置,所以我们不需要做任何修改(当然也可以参考其他工具的配置方式配置自定义安装的Git工具);JDK和Maven配置的路径则是10.3.1小节中搭建基础环境时对应的路径;Docker的路径也是manager1机器上安装的Docker路径(可以通过whereis docker指令查看,默认配置路径为/usr/lib/docker)。这里所有工具的名称都可以自行定义。

完成全局工具配置后,单击左下角的“Save”按钮就会跳转到Jenkins主页面。至此,Jenkins中的插件配置就已经完成。

服务自动化部署

完成Jenkins的安装配置后,就可以使用Jenkins工具来自动化集成、部署微服务项目了,其具体使用方式如下。

1.构建新任务

在Jenkins主页面,单击左侧的“新建”按钮,将会跳转到任务构建界面,其效果如图所示。

在任务构建页面中填写需要自动化集成、部署的任务名称,然后选中“构建一个maven项目”,最后单击“OK”按钮就会自动跳转到该任务配置页面,如图所示。

从图中框选部分内容可以看出,想要使用Jenkins完成自动化构建、部署工作,还需要对构建任务分步骤进行配置,其主要配置项的配置步骤如下。

(1)配置源码仓库地址

使用Jenkins自动构建任务,就需要从源码仓库(这里使用的是GitHub)自动拉取此次构建任务的项目源码。在“源码管理”中选择“Git”,并在“Repository URL”中输入需要部署的项目所在的GitHub源码地址,如图所示。

(2)构建触发器

构建触发器就是构建任务时的触发规则,用来规定什么时候触发任务的构建。其具体情形如图所示。

从图可以看出,Jenkins构建触发器提供了多种构建规则,这里针对其中常用的3种构建规则进行介绍,具体如下。

l Build periodically:表示在某个时间点进行自动任务构建,比如“H 2 * * *”表示每天凌晨2点开始执行项目构建(不管项目是否更新);

l Poll SCM:表示每隔一段时间会自动检查更新进行任务构建,比如“*/10 * * * *”表示每10分钟开始检查源码,如果有更新就自动执行构建。

l 当默认没有进行构建触发器配置时,我们可以在对应的任务面板中选择“立即构建”按钮,可以随时进行手工触发任务构建。

(3)服务发布配置

任务构建完成后,可以配置服务部署指令。此示例中,我们将会自动把整个服务项目自动部署到集群环境下,因此这里就需要进行服务发布配置,其效果如图所示。

在Post Steps(服务发布配置)页面,选择“Add post-build step”下拉列表中的“Execute shell”选项,并在命令框中输入需要发布服务的shell指令。为了确保集群环境下服务的正常部署,需要确认集群已经开启并且已经预先自定义好指定网段的网络,同时还要在集群管理节点进行私有仓库登录认证。

完成上述所有步骤的配置后,单击左下角的“保存”按钮就会跳转到该任务主页面,效果如图所示。

另外,关于构建任务配置界面中的其他步骤,如果有需要,还可以进行相应的配置,这里就不作详细介绍了。

2.自动化部署服务

在任务构建配置页面的构建触发器配置中,如果配置了定期自动构建服务,就不需要再做任何工作了,该构建任务会在指定的触发规则下进行任务的自动构建和部署工作。

为了演示Jenkins自动构建、部署服务的效果,单击任务主界面左侧的“立即构建”按钮后,会触发一次立即构建项目的动作,然后整个服务就会进入自动构建过程。此时我们可以单击“构建历史”中的倒三角,选择“Console Output”选项来查看整个构建过程的输出信息,如图所示。

选择进入任务对应的Console Output输出信息页面后,效果如图所示。

该任务初次自动化构建过程会需要一定的时间,当整个任务构建并发布完成后,Console Output控制台就会有构建成功或者失败的提示信息。

最终Console Output控制台打印出“Finished:SUCCESS”信息,这就表明通过Jenkins自动集成的服务项目已构建并部署成功。

(0)

相关推荐

  • 持续集成之 Jenkins 的安装与配置(一)

    一.持续集成的概念 Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,功能包 ...

  • 持续集成之 Jenkins 配置基于角色的项目权限管理(五)

    一.前言 Jenkins是个好东西,开发运维测试的老江湖应该都听过,在此我就不再多做介绍jenkins是个什么东西了. jenkins自身的权限管理,无法实现用户指定显示视图或者视图中指定的jobs, ...

  • 持续集成、持续交付和持续部署有什么区别?0基础学linux

    持续集成.持续交付和持续部署有什么区别?很多人在学习Linux运维技能时总是分不清楚这三个知识点.那么我们一起来看下吧. 1持续集成 持续集成,一种软件工程流程,将所有工程师对于软件的工作复本,每天集 ...

  • Jenkins持续集成

    时间 主题 8.13(周二)14:00 WebDriver鼠标键盘操作 8.14(周三)20:00 Jenkins持续集成 在传统的瀑布开发模型中,是所有人写好代码之后提交版本管理工具,然后统一进行合 ...

  • Docker版Jenkins持续集成

    随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的 ...

  • 持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

    一.背景 之前的项目是 public 的,如果我们在 gitlab上面把它修改成 private,然后再次打开配置,就可能会出现下面的错误,两种协议都会进行报错. 名称 IP 备注 Jenkins 1 ...

  • 持续集成 Jenkins +Gitlab + SSH 自动发布 HTML 代码

    一.整体流程 二.Jenkins 配置 2.1.首先安装插件 Gitlab Hook Plugin GitLab Plugin Publish Over SSH 2.2.配置目标服务器 系统管理 -- ...

  • Jenkins持续集成的13种替代方案

    在<Jenkins越来越老了-现在该继续前进>,我们讨论了Jenkins最常见的问题,这些问题促使我们寻找替代方法.这就是为什么在本文中,我们提供了用于持续集成的最常见的Jenkins替代 ...

  • Selenium2+python自动化62-jenkins持续集成环境搭建

    一.环境准备 小编环境: 1.win10 64位 2.JDK 1.8.0_66 3.tomcat 9.0.0.M4 4.jenkins 2.0 二.安装JDK 1.安装JDK教程很多,这里就不讲了,可 ...