在项目的开发中我常常喜欢用cc+maven+svn对自己的代码进行集成管理。有的时候,在搭建这个环境的时候,却老是出一些这样或那样的毛病,所以今天在这里留下点痕迹,以便日后查阅:)
环境及安装配置:CruiseControl-2.5,maven-2.0.4,svn-1.4.0,apache2.0.54,ldap为windows2003下AD服务器。
1: CruiseControl-2.5 的安装很容易直接next就可以了。
2:关于maven2.04的安装,直接解压到指定的目录,但是这个地方需要配置它的环境变量,因为在安装本地仓库的时候,需要用到maven的相关命令。其环境变量的配置如下:
变量名 MAVEN_HOME; 变量值为maven的解压路径,在系统变量列表中找到系统变量path,在变量值后追加”;%MAVEN_HOME%\bin”。最后测试一下配置是否成功,可以在cmd下输入mvn –v 如果正确则将提示Maven Version 2.0.4信息。
3:接下来先安装apache,安装过程中会提示填写ServerName等,有的话就填,没有的话就写上IP,或是localhost. 安装完apache,如果没有出错的话ApacheMonitor会出现在系统任务栏,并显示已运行状态.
4:安装svn-1.4.0,安装过程中svn会检测到系统中已经运行apache,apache会在期间自动重新启动, ApacheMonitor的状态栏也会自动改为"Apache/2.0.54(Win32) SVN/1.4.0 DAV/2",说明svn安装成功.
备注:如果apache和svn没有自动集成成功,也可以手动修改apache httpd.conf文件。具体说明将如下:
关于subversion与apache服务器配置问题
版本:subversion 1。40
apachae 2.054
安装好两个程序后,在apache2的httpd.conf文件里加入如下语句(一定要注意顺序):
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
将mod_dav_svn.so 和mod_authz_svn.so copy 到modules目录内
这样作好后,再创建SVN档案库
新建目录
E:/sam/projects
在CMD里输入:
svnadmin create E:/sam/projects/LDAPdms
即创建了一个LDAP的档案库;
然后在apache的httpd.conf配置文件里的最后加入
<Location /dms>
DAV svn
SVNPath E:\sam\projects\LdapDMS
</Location>
这样即配置成功了APACHE+subversion的档案库
可以通过http://localhost/dms访问你的档案库了;
2:怎么利用ldap (ad) + apache + subversion 进行档案库的权限管理;
AD配置
域:ashan.local;
组织单元: puyaodms
用户组: samSVNusers
用户: 杨川,userid:sam password:tiger
该用户属于上边的用户组;
将需要的DLL加入到apache里面的modules 文件夹下,在httpd.conf文件里加入
LoadModule auth_ldap_module modules/mod_auth_ldap.dll
模块;
然后在文件的最后加入:
<Location /LDAPdms>
##常规Subversion配置
DAV svn
# SVNListParentPath on
# SVNParentPath e:/SVNWork
SVNPath E:\sam\projects\LdapDMS
AuthType Basic
AuthName "/SVNWork"
# 以下为LDAP配置信息
# LDAP 协议版本,AD提供的LDAP为3
LDAP_Protocol_Version 3
# LDAP 服务器
LDAP_Server localhost
# LDAP 服务器端口
LDAP_Port 389
# LDAP 基础DN
Base_DN "ou=puyaodms,dc=ashan,dc=local"
# AD 的 LDAP 不允许进行匿名查询,因此需要提供一
# 个 AD 中的用户名及其密码用于 Apache 的LDAP查询
Bind_DN "cn=administrator,cn=Users,dc=ashan,dc=local"
Bind_Pass "tiger"
# 供 Apache 查询的 AD Object 的属性
UID_Attr "sAMAccountName"
# 允许什么条件的 AD 用户访问 Subversion;
# Require valid-group
Require filter "(memberOf=CN=samSVNusers,ou=puyaodms,dc=ashan,dc=local)"
</Location>
最后要发布项目到这个档案库,可以利用webtools的svn 发布过来,
首先在以建好的项目的上边右键,--team--share projects ;
输入:http://localhost:8888/LDAPdms
next....
svn配置好后,接下来,就是配置maven .
maven2的配置很简单,主要是一个pom.xml文件,这个文件的配置如下:
举例说明:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>skmsys</groupId> //项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.sam.skmsys生成的相对路径为:/org/sam/skmsys
<artifactId>skmsys</artifactId>//项目名称
<packaging>war</packaging> //打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
<version>1.0-SNAPSHOT</version> //版本
<build>
//资源目录
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<testResources>
<testResource>
<directory>test</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
</testResources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.0</version>
<configuration>
<webResources>
<resource>
<directory>WebRoot</directory>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
//下边是项目中需要依赖的库或包,这些包默认存储在X:\Documents and Settings\Administrator.LIPENG\.m2\repository(X是你操作系统所在盘符)下,
//也就是maven2的本地仓库。
//maven将根据下边的配置自动的在
http://repo1.maven.org/maven2上下载相应的包,当然我们也可以通过手动的形式把相应的包更新到maven的本地仓
//库,主要是用 mvn install:install-file -DgroupId=javax.transaction -DartifactId=commons-dbcp -Dversion=1.2.2 -Dpackaging=jar -Dfile=D:\src\commons-dbcp-1.2.2
//\commons-dbcp-1.2.2\commons-dbcp-1.2.2.jar
//其中:DartifactId 为要加入的包,Dversion加入报的版本,Dpackaging=jar什么样的包,Dfile具体的包
//至于缺什么 样的包,运行一次maven,察看包的错误就知道了
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.5</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>opensymphony</groupId>
<artifactId>xwork</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>2.6.9</version>
</dependency>
<dependency>
<groupId>tomcat</groupId>
<artifactId>tomcat-http</artifactId>
<version>5.5.9</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.1.ga</version>
</dependency>
</dependencies>
</project>
最后讲一下cruiseControl的配置:
cc 的配置也很简单 具体也是配置一个config.xml文件即可,同样用写一个简单的例子
<?xml version="1.0" ?>
<cruisecontrol>
// 创建CruiseControl的工作目录,结构如下:
/**
E:/ccwork/logs,E:/ccwork/checkouts,E:/ccwork/artifacts
注:CruiseControl支持构建多个项目,每个项目涉及:logs、checkout、artifacts。它们的作用分别是:记录build结果、checkout代码的工作目录、部件发布地。这个结构就是为了这三个目的而创建的,每一级下的project_name都是对应的。
如本例需要在checkouts创建一个skmsys文件夹,并把svn上相应的代码checkouts下来。以后cc就会自动地从这个地方update skmsys项目的代码了
**/
<property name="cruisedir" value="E:/ccwork"/>
<property name="logdir" value="${cruisedir}/logs"/>
<property name="checkoutdir" value="${cruisedir}/checkouts"/>
<property name="artifactdir" value="${cruisedir}/artifacts"/>
<project name="skmsys">
<labelincrementer/>
<listeners>
<currentbuildstatuslistener file="${logdir}/${project.name}/status.txt"/>
</listeners>
<bootstrappers>
<svnbootstrapper localWorkingCopy="${checkoutdir}/${project.name}" />
</bootstrappers>
<modificationset quietperiod="30">
<svn localWorkingCopy="${checkoutdir}/${project.name}"/>
</modificationset>
<schedule interval="60">
<maven2 mvnscript="F:/Tools/server/maven/maven-2.0.4/bin/mvn.bat"
pomfile="${checkoutdir}/${project.name}/pom.xml"
goal="clean test war:war"/>
</schedule>
<log dir="${logdir}/${project.name}">
<merge dir="${checkoutdir}/${project.name}/target/surefire-reports"/>
</log>
<publishers>
<onsuccess>
<artifactspublisher dest="${artifactdir}/${project.name}"
file="${checkoutdir}/${project.name}/target/skmsys-1.0-SNAPSHOT.war"/>
</onsuccess>
</publishers>
</project>
</cruisecontrol>
//修改%CruiseControl_Home%/ webapps/cruisecontrol/WEB-INF/web.xml:
//查找:context-param logDir;修改它的值:…/ccworkplace/logs
//查找:ArtifactServlet的init-param rootDir;修改它的值:…/ccworkplace/artifacts
这样就可以通过
http://localhost:8080访问你的项目管理信息了