java web项目自动构建系统

a8266347 贡献于2018-01-25

作者 薛飞  创建于2017-12-04 02:46:00   修改者王迅  修改于2017-12-19 08:58:00字数9153

文档摘要:随着IT行业的不断发展,软件开发的复杂度也随着不断提高。与此同时,软件的开发团队也越来越庞大,而如何更好地协同整个团队进行高效准确的工作,从而确保软件开发的质量已经慢慢成为了开发过程中不可回避的问题。
关键词:

 Java Web项目 自动构建系统 配置手册 文件状态: 文件标识: 【 】草稿 当前版本: 【 】正式发布 作  者: 南京研发中心 【√】正在修改 完成日期: 2017/12/04 目 录 1 概述 1 1.1 背景描述 1 1.2 持续集成环境的意义和目的 2 1.3 持续集成的价值 2 2 自动构建环境简介 3 2.1 硬件推荐配置 3 2.2 基础环境描述 3 2.3 操作系统环境配置 3 2.4 JDK 版本选择 5 2.5 SVN环境配置 5 2.6 Maven环境配置 5 2.7 Nexus OSS 环境配置 6 2.8 Jenkins 环境配置 7 2.9 WebLogic Server 环境配置 11 2.10 环境启动管理优化 11 3 持续集成应用配置 11 3.1 Maven应用配置 11 3.2 Jenkins应用配置 18 4 常见问题处理 24 4.1 Jenkins首次启动一直停留在下面页面 24 4.2 在Ecplise中出现找不到组件的问题 25 第 页 共 1 页 1 概述 1.1 背景描述 随着IT行业的不断发展,软件开发的复杂度也随着不断提高。与此同时,软件的开发团队也越来越庞大,而如何更好地协同整个团队进行高效准确的工作,从而确保软件开发的质量已经慢慢成为了开发过程中不可回避的问题。 在软件开发中,不同的功能模块一般由不同的开发成员负责,同一功能模块的各层代码也可能是不同的开发成员编写,经验告诉我们,模块之间的问题是最难解决的,也是最耗费时间的。它需要多个开发人员相互协作找出问题,而协作过程中的沟通所消耗的时间成本是相当高的。而且还可能因为沟通的不足导致模块返工。 事实上,在持续集成被提出来之前的传统开发方法中常常出现这种情况:由不同程序员开发的单个小模块可以单独工作,但把它们集成为一个大的系统则可能失败。而且集成失败往往是把集成放在开发周期后期,甚至是在项目快结束前单列的一个“总装阶段”。众所周知,问题发现的越晚,其修复的成本也就越高,耗时越长,而且经过新的修复工作后可能诞生新的错误,因此整个系统需要再次进行集成和测试,从而导致整个软件的生产周期漫长且不可预知。 上述传统开发方法带来的高集成成本和长开发周期将直接带来了显著的影响:首先是无法按期为客户提供稳定的产品,其次降低了开发团队的士气。开发团队士气降低将进一步导致产品开发的不顺,进而形成开发的恶性循环。 为了解决由传统开发方法带来的弊端,人们开始采用“早集成、常集成”的持续集成策略。从最初的分阶段集成,到后来的“每日构建 每日构建(daily builds): 每日构建意味着自动地,每天,完整地构建整个代码树。(“代码树”,原文为source tree,意思是将整个项目源代码的目录,子目录,文件的位置尽可能事先固定下来,这样在开发过程中各个模块间,各个文件间的相对位置都不会混乱。源代码树指的就是一个项目所有的已经组织好的代码文件。通常代码树应该用版本控制软件管理起来。 ” , 再发展到现在的持续集成(Continuous Integration,CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。 。持续集成通过自动化构建、自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能随时地、迅速地被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一 第 页 共 27 页 个稳定健康的集成状态。 1.2 持续集成环境的意义和目的 首先,持续集成服务器是自动构建系统中关键的一部分。Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 是一个开源项目,它提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。Jenkins还能通过自定义安装插件来实现多种多样的功能,目前Jenkins拥有超过600种的插件,基本可以满足你的大多数需求。Jenkins可以算是最近比较热门的持续集成服务器,许多公司和开源项目都在使用Jenkins,比如Facebook、GitHub、Yahoo!、Apache、Ubuntu等。 其次,中小型软件企业数量众多,其开发团队和项目也大多是中小型的,因此有大量可以采用轻量开发方法的空间。持续集成是轻量开发方法中一个非常重要的实践,是保证团队开发步调一致和保证开发质量的重要手段。将持续集成指导下的自动构建系统融合到开发过程中将大幅度提高软件质量,降低开发成本。 1.3 持续集成的价值 (1)一天中进行多次的集成,并做了相应的测试,这样有利于检查缺陷,了解软件的健康状况。 (2)减少重复的过程可以节省时间、费用和工作量。说起来简单,做起来难。这些浪费时间的重复劳动可能在我们的项目活动的任何一个环节发生,包括代码编译、数据库集成、测试、审查、部署及反馈。通过自动化的持续集成可以将这些重复的动作都变成自动化的,无需太多人工干预,让人们的时间更多的投入到动脑筋的、更高价值的事情上。 (3)持续集成可以在任何时间发布可以部署的软件。从外界来看,这是持续集成最明显的好处,我们可以对改进软件品质和减少风险说起来滔滔不绝,但对于客户来说,可以部署的软件产品是最实际的资产。利用持续集成,您可以经常对源代码进行一些小改动,并将这些改动和其他的代码进行集成。如果出现问 第 页 共 27 页 题,项目成员马上就会被通知到,问题会第一时间被修复。不采用持续集成的情况下,这些问题有可能到交付前的集成测试的时候才发现,有可能会导致延迟发布产品,而在急于修复这些缺陷的时候又有可能引入新的缺陷,最终可能导致项目失败。 (4)持续集成让我们能够注意到趋势并进行有效的决策。如果没有真实或最新的数据提供支持,项目就会遇到麻烦,每个人都会提出他最好的猜测。通常,项目成员通过手工收集这些信息,增加了负担,也很耗时。持续集成系统为项目构建状态和品质指标提供了及时的信息,有些持续集成系统可以报告功能完成度和缺陷率。再者由于经常集成,我们可以看到一些趋势,如构建成功或失败、总体品质以及其它的项目信息。 (5)持续集成可以建立开发团队对开发产品的信心,因为他们清楚的知道每一次构建的结果,他们知道他们对软件的改动造成了哪些影响,结果怎么样。而长期稳定的成功构建将极大的鼓舞团队的士气。 2 自动构建环境简介 2.1 硬件推荐配置 项目 推荐配置 备注 处理器 至强四核及以上 根据实际使用的性能要求增加配置。 内存 4GB及以上 硬盘 200GB及以上 2.2 基础环境描述 组件名称 描述 版本 服务端口 CentOS 6.x 操作系统 - JDK Java 开发包 最新版本 - SVN 代码版本管理 按需选择 - Maven 项目构建工具 最新版本 - Sonatype Nexus OSS 仓库管理系统 最新版本 8081 Jenkins 持续集成工具 最新版本 80 WebLogic Server WEB中间件 按需选择 - 2.3 操作系统环境配置 第 页 共 27 页 2.3.1 基础设置 n 建议操作系统版本为CentOS/RedHat 6.5 及以上版本 n 设置主机名 2.3.2 安全设置 如果对安全配置不熟悉,请关闭SELinux及iptables 2.3.3 目录结构创建 注意:此环境配置中所有软件都安装在/opt目录,在系统安装时应注意分区的划分。 2.3.4 环境变量设置 # vim ~/.bash_profile JAVA_HOME=/opt/java/jdk1.8.0_144 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar M2_HOME=/opt/maven/m2_home NEXUS_HOME=/opt/nexus/nexus JENKINS_HOME=/opt/jenkins/jenkins_home 第 页 共 27 页 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export JAVA_HOME CLASSPATH JENKINS_HOME M2_HOME NEXUS_HOME PATH export run_as_user="root" 2.3.5 其他参数设置 在 limits.conf 文件末尾追加以下行 # vim /etc/security/limits.conf * soft nproc 2047 * hard nproc 16384 * soft nofile 65536 * hard nofile 65536 2.4 JDK 版本选择 综合构建系统各组件JDK版本的需求,此文档环境中选择的是JDK 1.8版本,在实际应用配置时,可根据需要构建的项目所需版本实际相应JDK版本即可。 注意:JDK 统一放置在/opt/java/路径下,当前环境变量中设置的为JDK 1.8版本。 2.5 SVN环境配置 根据配置的需要创建自动构建的专用账户,用于Jenkins检出代码所用。 2.6 Maven环境配置 要求 描述 备注 JDK Maven 3.3+以上版本需要JDK 1.7 及以上的版本 内存 无最小要求 硬盘空间 10M软件安装空间 500MB以上本地资料库空间 2.6.1 软件下载 下载最新版本,此文档使用的版本为: apache-maven-3.5.2-bin.tar.gz 2.6.2 安装配置 第 页 共 27 页 1)将软件包上传至/opt/maven目录,解压 2)创建软链接 2.7 Nexus OSS 环境配置 要求 描述 备注 JDK JDK 1.8 及以上的版本 内存 无最小要求 硬盘空间 10M软件安装空间 500MB以上本地资料库空间 详见(官方文档) 2.7.1 软件下载 下载最新版本,此文档以使用的版本为: Nexus Repository Manager OSS 3.x - Unix 2.7.2 安装配置 1)将软件包上传至/opt/nexus目录,解压 2)创建软链接 3)启动nexus服务 注意:此处的告警可以忽略 第 页 共 27 页 4)通过浏览器访问服务http://ipaddress:8081 5)登录管理(默认用户名及口令:admin/admin123) 2.8 Jenkins 环境配置 要求 描述 备注 JDK JDK 1.8 及以上的版本 内存 1GB及以上 硬盘空间 50GB以上硬盘空间 2.8.1 软件下载 下载最新版本,此文档使用的版本为:LTS-2.73.3 2.8.2 安装配置 1)上传软件包至/opt/jenkins目录 2)创建启动脚本,startJenkins.sh,脚本内容如下 nohup java -jar /opt/jenkins/jenkins.war --httpPort=80 >/dev/null 2>&1 & 3)启动服务 4)服务器启动后,通过浏览器访问http://ipaddress 第 页 共 27 页 注意:如长时间停留在此页面,请看4.1进行相关问题处理。 5)输入初始化口令,解锁Jenkins 6)选择需要安装的插件,此文文档中选择“安装推荐插件”,其他插件可以在插件中心中选择所需安装 第 页 共 27 页 7)创建管理员账户 第 页 共 27 页 8)完成初始化配置 第 页 共 27 页 2.9 WebLogic Server 环境配置 根据项目实际需要选择适合的WEB中间件及版本,此文档中使用的为WebLogic Server 注意: WebLogic Server 11g(10.3.6) 支持JDK 1.6 WebLogic Server 12c(12.2.1.2)支持 JDK 1.8 及以上 2.10 环境启动管理优化 为了便于系统维护管理,请在/opt目录下创建以下维护脚本(startCI.py),脚本内容如下: 3 持续集成应用配置 3.1 Maven应用配置 3.1.1 环境配置 Maven的安装就三个步骤:1、下载安装包;2、解压缩文件;3、设置环境变量。整个过程比我写这篇文档要简单多了。 第 页 共 27 页 3.1.1.1 安装包下载 Maven安装包的获取是开创新世纪的开始。 你可以在这儿找到Maven的安装文件:\\172.16.5.6\统一开发环境\maven.zip。 3.1.1.2 解压缩文件 首先确定你想将maven安装到哪儿,然后将maven.zip解压到那儿就行。这个目录就是Maven安装的主目录的(在winrar中选择“解压到当前文件夹”即可)。比如安装目录是在这儿: 3.1.1.3 设置环境变量 设置环境变量,包括:增加M2_HOME、MAVEN_OPTS环境变量,修改Path变量。 1、M2_HOME=<你的maven安装目录>。比如我的是F:\Tools\maven。 2、MAVEN_OPTS=-Xms128m -Xmx512m -Xdebug -Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n。 3、在PATH变量中增加:;%M2_HOME%\bin。 第 页 共 27 页 到此为止,maven安装已经完成!在命令行下输入:mvn –v,如果你得到和下图类似的界面,那么恭喜你,安装成功! 友情提示:作为专业的开发人员,关于java环境的安装并不包括在本指南中。本指南假设你已经配置好java开发所需的一切。 第 页 共 27 页 3.1.1.4 Maven进阶配置 其实Maven的进阶配置更简单。因为我们已经提供了一个能够满足公司开发要求的配置文件,因此进阶配置就是将maven安装目录/conf下的settings.xml拷贝到用户目录的.m2目录下。 3.1.2 插件安装 本插件安装,以Eclipse开发工具为例,具体如下: 3.1.2.1 M2Eclipse插件下载 M2Eclipse是maven的Eclipse插件。我们提供了该插件的本地下载地址: \\172.16.5.6\统一开发环境\Eclipse\散装版\插件\maven-eclipse_plugin.zip。 强烈提醒:不要使用在线安装的方式安装M2Eclipse。一般来讲,高版本比低版本好用, 第 页 共 27 页 但M2Eclipse是个例外。 下载完后,解压缩,可以看到两个目录:features和plugins。将它们拷到Eclipse的安装目录下后重启Eclipse即可。 3.1.2.2 Eclipse配置 Eclipse中Maven的配置就是指定Maven安装目录。M2Eclipse自带了一个maven版本,不过不要使用它,需要使用我们在前面安装的版本。 从以下路径进入指定maven安装位置:WindowèMavenèInstallations。 第 页 共 27 页 3.1.3 项目搭建 3.1.3.1 项目基本结构 为了便于各项目组的沟通,我们对项目的基本结构作如下约定: a) 对于一个普通的web项目,包括xxx-parent;xxx-api; xxx-service和xxx-view五个子项目。 b) xxx-parent是本项目的共通配置部分,项目类型为pom。 c) xxx-api是本项目的接口部分,项目类型为jar。 d) xxx-service是本项目的服务实现,是api接口的真实实现。项目类型为war。 e) xxx-view是本项目的展现层(Action)实现。项目类型为war。 3.1.3.2 项目新建 3.1.3.2.1 xxx-parent 在eclipse中选择新建“Maven Project”。 模板选择:选择Artifact Id为pom-root的模板,可通过Filter进行过滤,如下图: 第 页 共 27 页 设置项目属性。尤其注意Package参数的设置(一般会根据Group ID的内容自动带出): 完成后,打开pom.xml文件,如下: 第 页 共 27 页 3.1.3.2.2 xxx-api 项目的创建类似于xxx-parent,差别只在选择项目模板(ArcheType)时,选择Artifact Id为maven-archetype-quickstart的模板。 3.1.3.2.3 xxx-service(view) 项目的创建类似于xxx-parent,差别只在选择项目的模板时,选择Artifact Id为maven-archetype-webappt的模板。 最后,在建好的API、SERVICE、VIEW的项目上点鼠标右键,Maven菜单和Run As菜单是与maven相关的菜单项。 Run As菜单中包括了maven的一些基本命令操作(见附录)。 maven菜单可以更新依赖项。 3.1.3.3 现有项目迁移 首先按照新建项目的方式建立项目目录,然后将java代码拷贝到src/main/java目录下;将原来src目录下的配置文件拷贝到src/main/resources目录下(如果src/main/resources目录不存在,则必须先通过创建源代码目录的方式新建);将原来WebContent目录下的文件拷贝到src/main/webapp目录下。 3.2 Jenkins应用配置 第 页 共 27 页 3.2.1 概述 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 Jenkins提供了自动下载源码、编译、打包及自动部署功能,方便开发人员自动构建、分布式构建及集成构建项目,大大简化开发人员部署过程、节约部署时间。 自动构建,Jenkins提供任务传递机制,通过构建任务与其他构建任务关联,当构建任务启动后,并完成构建任务,其他任务自动启动构建,直到所有关联的任务构建完成。 分布式构建,系统一般由多个子系统组成,一个子系统建3个构建任务,而对于整个项目来讲,就会有多个构建任务。对于项目发布,尤其是可能只需要升级其中一个子系统来讲,Jenkins只需要构建其中一个子系统即可,其他保持一样。减少开发过程中,其他子系统不必要的构建,从而影响整个项目部署包。 集成构建,Jenkins可以将多个部署包,按照规则合成一个部署包。研发人员根据业务特性实现可分可合的部署方式。 3.2.2 配置项目部署信息 这里以Maven项目、以Weblogic中间件为例,项目中的pom.xml配置部署信息,在build下加入weblogic插件,如下: 第 页 共 27 页 3.2.3 Jenkins配置(Maven项目) 进入Jenkins页面(http://172.16.5.29),如下图: 1区域为视图区域,2区域为构建任务区域,每个视图下都有自己的任务区域。 3.2.3.1 新建视图 点击下图【】图标,如下图: 填写视图名称:xxx,并选中“ListView”,点击OK。 选择构建任务,或者直接保存。 第 页 共 27 页 3.2.3.2 新建构建任务 点击左侧菜单中的“新建”链接或者点击右侧XXX视图下的“创建一个新的任务”链接,如下图: 输入ltem名称:xxx-view,并选中第一个“构建一个自由风格的软件项目”。如下图所示: 第 页 共 27 页 3.2.3.3 配置构建任务 选中“丢弃旧的构建”,将下面的“保持构建的最大个数”设置成5。目的是防止磁盘空间被部署包无限占用,xxx-view部署包在构建系统上始终保持5个,如果不设置,部署包数量无限增多。 “JDK”设置项,为项目使用的JDK,如下图: 源码管理,选中“Subversion Modules”,从SVN服务器上获取源码;“Repository URL”填写源码路径(SVN路径),其他不变,如下图。如果首次加载SVN源码的话,还需要进行svn认证信息确认。 第 页 共 27 页 构建——编译打包,点击“增加构建步骤”按钮,选择“invoke top-level Maven targets”项,图下图: 添加构建命令:clean deploy -U –N,将源码通过构建系统编译、打包,如下图: 构建——部署,再点击“增加构建步骤”按钮,选择“invoke top-level Maven targets”项,图下图: 在第二个构建中添加命令:weblogic:redeploy,将包发布到weblogic中间件上。如下图: 第 页 共 27 页 点击“保存”按钮,如下图: 重新配置,点击左侧菜单“配置”链接,检查没有问题时,点击左侧菜单“立即构建”链接,开始执行构建任务。如下图: 任务构建完后,部署包会上传maven仓库中,如下图: 第 页 共 27 页 4 常见问题处理 4.1 Jenkins首次启动一直停留在下面页面 解决方式: [root@jenkins ~]# cd $JENKINS_HOME/updates [root@jenkins updates]# vim default.json 把"connectionCheckUrl":"http://www.google.com/"改为"connectionCheckUrl":"http://www.baidu.com/" 4.2 在Ecplise中出现找不到组件的问题 在项目的开发过程中,可能会出现如下情况:在Eclipse环境中,报项目依赖的parent组件找不到的错误(Non-resolvable parent POM: Could not find artifact com.strongit.nj.sbhd.service.xxfb:xxfb-parent:pom:1.0 in nexus (http://172.16.5.15:8081/nexus/content/groups/public) and 'parent.relativePath' points at wrong local POM),但在hudson上构建是成功的,即代码本身是没有问题的,组件在仓库中也的确是存在的,但Ecliplse中却说不能发现此组件。 第 页 共 27 页 出现此问题的原因,一是Eclipse开发工具问题,另一是因为在本地仓库中没有此组件。 第一种情况,解决方式有3,分别是1)右击项目,选择Run AS 中 Maven Clean 选项,完成后,在开发工具中选择Project à Clean…重新编译一下;2)把本地Maven仓库中对应的依赖删掉,然后右击项目,选择Maven 中Update Dependenceisc重新下载依赖;3)将项目关闭,或开发工具,重新打开。 第二种情况,需要我们手动将组件安装到本地仓库,具体步骤如下: 1、到我们公司的nexus上,找到需要的那个组件,并且下载下来。 2、打开cmd窗口,执行如下命令: mvn install:install-file -DgroupId=com.strongit.nj.sbhd.service.xxfb -DartifactId=xxfb-parent -Dversion=1.0 -Dpackaging=pom -Dfile=xxfb-parent-1.0.pom 第 页 共 27 页 其中,黑体字部分,根据实际情况进行赋值,前面三个参数,即组件的GAV坐标值,第四个参数,为组件类型(jar、war、pom),最后一个参数,就是步骤1中从nexus下载下来的组件文件的文件地址。 3、步骤2执行成功后,即完成了本地仓库的安装,再重新编译Eclipse中的项目,即可。 第 页 共 27 页

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档