首页 > 代码库 > 利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(一)(网内首发超详细版)

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(一)(网内首发超详细版)

目录结构如下:

目录

1说明及环境介绍3


1.1说明3


1.2环境准备格式约定4


2 Linux下apache搭建svn服务器4


2.1 apache安装部署4


2.2 svn安装部署5


2.3整合svn和apache6


2.4 ssl方式部署apache7


2.4.1安装apache7


2.4.2安装svn7


2.4.2 部署认证8


3 Linuxsvn独立服务器方式部署9


3.1安装SVN9


3.2 配置环境10


3.3 权限配置样例11


3.4 启动SVN服务器12


3.5 访问方式12


3.6 开启火墙SVN端口12


4 yum方式快速部署apache和svn13


5 Jenkins部署方法13


5.1 Jenkins部署方法一13


5.2 Jenkins部署方法14


6安装maven15


7 java环境自动构建部署16


7.1 新建job16


7.2利用maven命令创建web项目16


8 Subversion FAQ19


8.1 官方FAQ网址19


8.2 svn遇到错误总结19


8.2.1 svn不显示日志19


8.2.2 版本冲突问题19


8.2.3 svnadmin报错19


9 apache FAQ20


9.1 Could not reliably determine the server‘s fully qualified domain name20


9.2 svn客户端提交文件失败20


9.3无法访问版本库40320

1说明及环境介绍

1.1说明

以下将采用apache+svn+Jenkins+maven部署一套易于java环境快速开发的版本控制及自动构建系统。以2者相结合的方式进行快速开发。

在所有的Subversion服务器配置方式中,基于Apache的是最灵活的。虽然配置起来有一点点复杂,但是它提供了其它方式所没有的好处:
   WebDAV
基于Apache配置的Subversion服务器使用了被许多其它程序支持的WebDAV协议。举个例子,你可以在Windows的资源管理器中将这样的一个版本库挂载成一个“Webfolder”,然后像文件系统中的其它文件夹一样访问它。

浏览版本库
你可以在不安装Subversion客户端的情况下,使用浏览器来浏览版本库中的内容。这将使得更大范围的用户可以访问你的数据。

用户验证
你可以使用任何Apache支持的验证机制,包括SSPI和LDAP。

安全
Apache是非常的稳定和安全,因此你的版本库自然而然地拥有同样的安全性。包括SSL加密。

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能

Jenkins,之前叫做Hudson,是基于Java开发的一种持续集成工具,用于监控秩序重复的工作,包括:

1)持续的软件版本发布/测试项目。

2)监控外部调用执行的工作。

Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具Maven是一个采用纯Java编写的开 源项目管理工具。Maven采用了一种被称之为project object model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件,Maven可以管理项目的整个声明周期,包括编 译,构建,测试,发布,报告等等。目前Apache下绝大多数项目都已经采用Maven进行管理。而Maven本身还支持多种插件,可以方便更灵活的控制 项目。

绝大多数开发人员都把 Ant 当作 Java 编程项目的标准构建工具。遗憾的是,Ant项目管理工具(作为 make的替代工具)不能满足绝大多数开发人员的需要。通过检查 Ant 构建文件,很难发现项目的相关性信息和其它信息(如开发人员/拥有者、版本或站点主页)。

Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目,而使用 Ant 则需要十几行。事实上,由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

1.2环境准备格式约定

系统centos5.9 x64

Apache+svn:192.168.1.19

Jenkins+maven:192.168.1.20

下载所需软件

apache下载地址:http://www.apache.org/


wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz


wget http://labs.mop.com/apache-mirror/subversion/subversion-1.7.8.tar.gz


wget http://archive.apache.org/dist/apr/apr-util-1.5.1.tar.gz


wget http://archive.apache.org/dist/apr/apr-1.4.6.tar.gz


wget http://www.sqlite.org/sqlite-amalgamation-3071502.zip


环境清理

系统在默认情况下,是已经有apr-util及apr这两个包的,只不过他们的版本较低,只支持subversion 1.4

因此,具体可以看看:

yum -y remove subversion或者yum erase subversion


查看默认安装

# rpm -qa | grep apr


而subversion要求较高的版本,为此,我们需要删除系统自带的apr,apr-util这两个包!强行删掉!

# rpm -e --allmatches apr-util


# rpm -e --allmatches apr-util --nodeps


# rpm -e --allmatches apr --nodeps


默认安装svn-1.61版本

rm -rf /usr/bin/svn* (不删除环境变量不生效)


格式约定

一级标题:黑体四号

二级标题:黑体四号

三级标题黑体小四

正文5号楷体

注释及注意:深红5号楷体

2 Linux下apache搭建svn服务器


2.1 apache安装部署


安装openssl(非必须,可以使用默认openssl)


wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz


tar zxvf openssl-1.0.1g.tar.gz


cd openssl-1.0.0g


make && make install


cp /usr/local/ssl/bin/openssl /usr/bin/          #覆盖系统默认的openssl命令


openssl version                      #查看openssl版本


安装apache


tar -xzvf httpd-2.2.19.tar.gz


cd httpd-2.2.19


./configure --prefix=/usr/local/apache2 --enable-dav --enable-so --enable-mods-shared=all


make && make install


2.2 svn安装部署


安装svn相关软件包


tar -xzvf apr-1.4.6.tar.gz


cd apr-1.4.6


./configure --prefix=/usr/local/apr


make && make install


tar -xzvf  apr-util-1.5.1.tar.gz


cd apr-util-1.5.1


./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr


make && make install


echo "/usr/local/apr/lib/" >> /etc/ld.so.conf


ldconfig


tar -xzvf neon-0.29.6.tar.gz


cd neon-0.29.6


./configure --prefix=/usr/local/neon


make && make install


echo "/usr/local/neon/lib" >> /etc/ld.so.conf


ldconfig


unzip sqlite-amalgamation-3071502.zip


tar -xzvf subversion-1.7.8.tar.gz


mv sqlite-amalgamation-3071502 ./subversion-1.7.8/sqlite-amalgamation


cd subversion-1.7.8


./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --without-berkeley-db --with-ssl


make && make install


验证svn安装是否成功,如果报错请看错误章节


/usr/local/svn/bin/svnserve --version


添加svn用户


groupadd svn


useradd -g svn -s /sbin/nologin svn


添加SVN版本库目录,并赋予SVN用户权限


mkdir -p /data/svndata


chown -R svn.svn /data/svndata


创建版本库


/usr/local/svn/bin/svnadmin create  /data/svndata/fengwang


注:svn默认数据存储类型为--fs-type fsfs 可以自己选择,建议用默认方式。


详见:http://www.blogjava.net/jasmine214--love/archive/2011/01/18/343160.html


添加svn用户


/usr/local/apache2/bin/htpasswd -bc /usr/local/svn/conf/svnusers.conf svntest 123456


添加svn认证文件


cat >> /usr/local/svn/conf/authz.conf <<END


[groups]


admin = svnteset


[/]


* = r


@admin = rw


[fengwang:/]


* = rw


@admin = rw


END


版本库下文件说明


conf目录下存放了版本库的配置文件,包括用户访问控制和权限控制等内容;
db目录下存放着 Subversion 所要管理的所有受版本控制的数据,不同的存储方式(Berkeley DB 或者 FSFS)下有着不同的目录结构,不过我们一般不用直接修改和查看这个目录下的内容,Subversion 的命令可以安全的操作这个目录
hooks目录存放着钩子脚本及其模版(一种版本库事件触发程序);
locks目录存放着 Subversion 版本库锁定数据,用来追踪存取文件库的客户端;
format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号


2.3整合svn和apache


修改apache配置文件httpd.conf


vim /usr/local/apache2/conf/httpd.conf


LoadModule dav_svn_module modules/mod_dav_svn.so


LoadModule authz_svn_module modules/mod_authz_svn.so


<Location /svn>


  DAV svn


  SVNListParentPath on


  SVNParentPath /data/svndata                            


  AuthzSVNAccessFile /usr/local/svn/conf/authz.conf


  AuthType Basic


  AuthName "Subversion 1.7.18"


  AuthUserFile /usr/local/svn/conf/svnusers.conf


  Require valid-user


</Location>


注:以上配置为Apache多库方式,即一个location可以同时为多个版本库服务。既可以/data/svndata下建立两个版本库,proj1和proj2等。另外mod_authz_svn.somod_dav_svn.so生成是在安装svn后生成的,因此安装好SVN后才进行整合处理。访问方式如http://IP/svn/proj1,http://IP/svn/proj2


单独版本库方式如下


<Location /svn>


  DAV svn


  SVNPath /data/svndata                            


  AuthzSVNAccessFile /usr/local/svn/conf/authz.conf


  AuthType Basic


  AuthName "Subversion 1.7.18"


  AuthUserFile /usr/local/svn/conf/svnusers.conf


  Require valid-user


</Location>


ssl多版本库方式如下:


<Location /svn>


  DAV svn


  SVNListParentPath on


  SVNParentPath /data/svndata


  AuthzSVNAccessFile /usr/local/svn/conf/authz.conf


  AuthType Basic


  AuthName "Subversion 1.7.18"


  AuthUserFile /usr/local/svn/conf/svnusers.conf


  Require valid-user


SSLRequireSSL


</Location>


注:若同时在httpd.conf和httpd-dav.conf中添加svn数据仓库及密码文件路径等,则可同时支持http及https访问,前提是配置好证书认证。若在httpd.conf或者http-dav.conf中增加了SSLRequireSSL,则只支持https访问。

阅读第二部分请点击:http://auskangaroo.blog.51cto.com/740826/1410544


本文出自 “技术改变未来” 博客,请务必保留此出处http://auskangaroo.blog.51cto.com/740826/1410530