设为首页 收藏本站
查看: 1184|回复: 0

[经验分享] Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建

[复制链接]

尚未签到

发表于 2018-9-3 11:51:10 | 显示全部楼层 |阅读模式
  详解Jenkins +Maven+Tomcat+SVN +Apache项目持续集成
  一:前言
  1. Jenkins
  jenkins版本大全http://mirrors.jenkins-ci.org/
  1.1 Jenkins持续集成简介
  持续集成(Continuous Integration)是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。本文正是从持续集成的基本概念入手,通过具体实例,介绍了如何基于 Jenkins 快速搭建持续集成环境。
  Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。
  1.2持续集成意义
  1) 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
  2) 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
  3)  持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
  1.3持续集成组件
  1)  一个自动构建过程,包括自动编译、分发、部署和测试;
  2)  一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,例如SVN、GIT代码库;
  3)  一个jenkins持续集成服务器。如下123.57.11.203服务器就是一个配置简单和使用方便的持续集成服务器。
  2.Maven
  1)Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件.
  2)Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。能够很方便的帮你管理项目报告,生成站点,管理JAR文件等。
  3.Tomcat
  1)Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
  2)配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。
  4.SVN
  SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
  要注意的是SVN设计的时候只考虑了兼容Apache2.x,所以在Apache1.x下是不能正常工作的。
  5.Apache
  Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
  apache与Tomcat的区别
  Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,serverlet)。Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持php,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)。两者都是一种容器,只不过发布的东西不同:Apache是html容器,功能像IIS一样;Tomcat是jsp/servlet容器,用于发布jsp及java的,类似的有IBM的webshere、EBA的Weblogic,sun的JRun等等。Apache和Tomcat是独立的,在通一台服务器上可以集成。Apache只支持静态网页,但像asp,php,cgi,jsp等动态网页就需要Tomcat来处理。
  打个比方:Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。
  Apache和Tomcat整合使用:如果客户端请求的是静态页面,则只需要Apache服务器响应请求;如果客户端请求动态页面,则是Tomcat服务器响应请求;因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销 。
  二:下载网址及安装环境
  1.下载网址
  https://jenkins.io/download/      jenkins.war(WAR包)
DSC0000.jpg

DSC0001.jpg

  https://pkg.jenkins.io/redhat/     Jenkins (RPM包)
DSC0002.jpg

  https://pkg.jenkins.io/debian-stable/   Jenkins (DEB包)
DSC0003.jpg

  http://maven.apache.org/download.cgi   Maven下载
  https://tomcat.apache.org/download-80.cgi  Tomcat下载
  http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK下载
  2.本案例安装环境
  OS:Ubunutu 17.04
  IP:192.168.44.132 (Tomcat+JDK+Jenkins+Maven)
  IP:192.168.44.133 (SVN+Apache)
  jenkins.war                         本案例是结合Tomcat使用,使用war包,未使用deb包
  apache-maven-3.5.2-bin.tar.gz
  apache-tomcat-8.5.24.tar.gz
  jdk-8u151-linux-x64.tar.gz
  SVN和Apache                    SVN源码非常麻烦,建议apt-get安装,Apache也用apt-get安装
  三:安装软件
  IP:192.168.44.132
  tar zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local/
  tar zxvf apache-tomcat-8.5.24.tar.gz -C /usr/local/
  tar zxvf apache-maven-3.5.2-bin.tar.gz -C /usr/local/
  vi /etc/profile
  设置Java变量
  export JAVA_HOME=/usr/local/jdk1.8.0_151
  export JRE_HOME=/usr/local/jdk1.8.0_151/jre
  export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/jdk1.8.0_151/bin

  export>  设置maven变量
  export MAVEN_HOME=/usr/local/apache-maven-3.5.2
  export PATH=${MAVEN_HOME}/bin:${PATH}
  刷新变量
  . /etc/profile
  查看Java信息
  root@ubuntu:/usr/local# java -version
  java version "1.8.0_151"
  Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
  Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
  查看maven版本
  root@ubuntu:/usr/local# mvn -v
  Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
  Maven home: /usr/local/apache-maven-3.5.2
  Java version: 1.8.0_151, vendor: Oracle Corporation
  Java home: /usr/local/jdk1.8.0_151/jre
  Default locale: en_HK, platform encoding: UTF-8
  OS name: "linux", version: "4.10.0-19-generic", arch: "amd64", family: "unix"
  测试Tomcat是否正常
  /usr/local/apache-tomcat-8.5.24/bin/startup.sh
  浏览器窗口输入: http://192.168.44.132:8080/
DSC0004.jpg

  关闭Tomcat
  /usr/local/apache-tomcat-8.5.24/bin/shutdown.sh
  jenkins的配置
  mkdir -p /data/postmall/tomcat/webapps
  mv /usr/local/jenkins.war /data/postmall/tomcat/webapps/
  本例是更改了Tomcat默认端口为8888,然后把appBase路径更改为/data/postmall/tomcat/webapps,如下图,更改后重新启动Tomcat即可,在/data/postmall/tomcat/webapps下可看到多了一个jenkins的目录,war包已被解开。
DSC0005.jpg

  Tomcat中appBase,这个目录表示:
  1 这个目录下面的子目录将自动被部署为应用。
  2 这个目录下面的.war文件将被自动解压缩并部署为应用
  公司里的测试环境一般是一个容器下跑多个项目,生产环境是一个容器跑一个项目。
  给大家截图看下我们公司的测试环境
DSC0006.jpg

  给大家截图看下我们公司的生产环境
DSC0007.jpg

  在web页面访问
  http://192.168.44.132:8888/jenkins
  弹出的对话框
  用户名:admin
  密码:复制initialAdminPassword中的加密字符串
  文件默认在安装用户的/root/.jenkins/secrets/initialAdminPassword中,并且是加密的方式存放,本例用的是root用户。
DSC0008.jpg

  生产环境建议更改至其他目录,请参考我的另一篇文档 http://blog.51cto.com/12943999/2054791
  至此192.168.44.132软件安装完成。
  IP:192.168.44.133
  一:安装软件
  apt-get install apache2
  apt-get install subversion
  apt-get install libapache2-svn
  完成以上安装,可以直接访问apache的主页,如http://localhost/
  命令行下curl -I -m 15 -o /dev/null -s -w %{http_code} localhost
DSC0009.jpg

  关于curl的用法,请参考我的另一篇文档 http://blog.51cto.com/12943999/2057858
  二:SVN的配置
  1.建立svn仓库
  1). 建立svn目录:mkdir -p /home/.svn/svnrepos/project (使用隐藏目录,更安全)
  2). 创建仓库project:svnadmin create /home/.svn/svnrepos/project,执行完毕后project目录有svnadmin创建的目录和文件
  2.配置和管理svn
  1)仓库的配置文件在/home/.svn/svnrepos/project/conf/下,先备份配置文件。注意:下面配置项的行都要顶格,否则会报错。
  cd /home/.svn/svnrepos/project/ && mkdir conf.bak && cp -rf conf/* conf.bak/ && vi conf/svnserve.conf
  配置项在[general]下:
  anon-access:匿名用户的权限,可以设置为read,write和none,默认值read。不允许匿名用户访问:anon-access = none
  auth-access:认证用户的权限,可以为read,write和none,默认值write。
  password-db:密码数据库的路径,去掉前边的#。
  authz-db:认证规则库的路径,去掉前边的#。
  realm = /home/.svn/svnrepos/project 仓库的目录,去掉前面的#,默认不修改也行。
  2)配置passwd文件
  这是每个用户的密码文件,比较简单,就是“用户名=密码”,采用的是明码。例如:
  allen=111111
  bllen=222222
  ellen=333333
  3)配置authz文件
  [groups] section:为了便于管理,可以将一些用户放到一个组里边,比如:owner=allen,bllen
  groups下边的sections表示对一个目录的认证规则,比如对根目录的认证规则的section为[/]。设置单用户的认证规则时一个用户一行,在末尾添加,例如:
  [/]
  allen=rw   #allen对根目录的权限为rw
  bllen=rw       #bllen对根目录的权限为rw
  ellen=r         #bllen对根目录的权限为r
  如果使用group,需要在group名字前加@,在末尾添加
  [/]
  @owner=rw  #group owner中的用户均为rw,等价于上边的allen=rw,bllen=rw
  *=r                    #除allen和bllen之外的所有用户为只读
  3.启动和停止svn服务
  1). 启动:
  从svnrepos目录启动,svnserve -d -r /home/.svn/svnrepos/project,根目录[/]是project
  2). 测试访问:
  在浏览器输入svn://192.168.44.133,在弹出的窗口中输入用户名和密码
DSC00010.jpg

DSC00011.jpg

  3). 停止:
  killall svnserve
  简言之,每个仓库的根目录(/)就是自己的起始目录; [/]适合于单仓库的方式 ,不能跨越仓库设置权限。
  客户端SVN的使用请看我的另一篇文章 http://blog.51cto.com/12943999/2053553
  如果启动SVN不能访问,检查配置文件里用户名密码是否正确,也可以尝试在设置-已保存数据里把已保存的记录全部删除,再尝试。
  4). 修改端口
  修改apache2端口
  root@ubuntu:/etc/apache2# vi ports.conf
  Listen 端口    #你想要的端口
  
  Listen 443
  
  
  Listen 443
  
  如果你想修改SVN默认的端口
  重新指定一个端口号(默认端口3690)比如修改为3691
  svnserve -d –listen-port 3691 -r /home/.svn/svnrepos/project
  配置完毕重启/etc/init.d/apache2 restart
  例如:把333.txt放到test文件夹,尝试提交则提示验证失败,因为我们给ellen用户的是读取权限,不能写入,用allen和bllen就可以。
DSC00012.jpg

  至此192.168.44.133软件安装完成。
  提供几个写的不错的博客链接,大家可以看一下,互相学习,共同进步。
  jenkins 安装与配置
  http://blog.51cto.com/kaliarch/2050862
  jenkins 用户权限配置
  http://blog.csdn.net/ruisheng_412/article/details/8083035
  jenkins 分布式配置
  http://blog.sina.com.cn/s/blog_5d157a1d01017mut.html
  Maven配置详解:那么请进
  http://www.cnblogs.com/bigtall/archive/2011/03/23/1993253.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-562018-1-1.html 上篇帖子: Jenkins 分布式应用 下篇帖子: Jenkins出现No valid crumb was included in the reques-karony
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表