详解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包)
https://pkg.jenkins.io/redhat/ Jenkins (RPM包)
https://pkg.jenkins.io/debian-stable/ Jenkins (DEB包)
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 CLASSPATH=./:/usr/local/jdk1.8.0_151/lib:/usr/local/jdk1.8.0_151/jre/lib
设置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/
关闭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包已被解开。
Tomcat中appBase,这个目录表示:
1 这个目录下面的子目录将自动被部署为应用。
2 这个目录下面的.war文件将被自动解压缩并部署为应用
公司里的测试环境一般是一个容器下跑多个项目,生产环境是一个容器跑一个项目。
给大家截图看下我们公司的测试环境
给大家截图看下我们公司的生产环境
在web页面访问
http://192.168.44.132:8888/jenkins
弹出的对话框
用户名:admin
密码:复制initialAdminPassword中的加密字符串
文件默认在安装用户的/root/.jenkins/secrets/initialAdminPassword中,并且是加密的方式存放,本例用的是root用户。
生产环境建议更改至其他目录,请参考我的另一篇文档 https://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
关于curl的用法,请参考我的另一篇文档 https://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,在弹出的窗口中输入用户名和密码
3). 停止:
killall svnserve
简言之,每个仓库的根目录(/)就是自己的起始目录; [/]适合于单仓库的方式 ,不能跨越仓库设置权限。
客户端SVN的使用请看我的另一篇文章 https://blog.51cto.com/12943999/2053553
如果启动SVN不能访问,检查配置文件里用户名密码是否正确,也可以尝试在设置-已保存数据里把已保存的记录全部删除,再尝试。
4). 修改端口
修改apache2端口
root@ubuntu:/etc/apache2# vi ports.conf
Listen 端口 #你想要的端口
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
如果你想修改SVN默认的端口
重新指定一个端口号(默认端口3690)比如修改为3691
svnserve -d –listen-port 3691 -r /home/.svn/svnrepos/project
配置完毕重启/etc/init.d/apache2 restart
例如:把333.txt放到test文件夹,尝试提交则提示验证失败,因为我们给ellen用户的是读取权限,不能写入,用allen和bllen就可以。
至此192.168.44.133软件安装完成。
提供几个写的不错的博客链接,大家可以看一下,互相学习,共同进步。
jenkins 安装与配置
https://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
转载于:https://blog.51cto.com/12943999/2065500