hudson+maven+svn

  Hudson+maven仓库(nexus)+svn 简单自动化部署

                            Maven开发基础环境搭建

1.   Maven介绍

本书将介绍Maven这一跨平台的项目管理工具。作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven都能大显身手。

默认目录结构,maven 是约定优于配置。

2.   安装maven

下载地址:http://maven.apache.org/download.html

这里的Maven安装目录是D:\bin\apache-maven-3.0,接着需要设置环境变量,将Maven安装配置到操作系统环境中。

打开系统属性面板(桌面上右键单击“我的电脑”→“属性”),点击高级系统设置,再点击环境变量,在系统变量中新建一个变量,变量名为M2_HOME,变量值为Maven的安装目录D:\bin\apache-maven-3.0。点击确定,接着在系统变量中找到一个名为Path的变量,在变量值的末尾加上%M2_HOME%\bin;,注意多个值之间需要有分号隔开,然后点击确定。至此,环境变量设置完成,详细情况如图2-2所示:

图2-2 Windows中系统环境变量配置

这里需要提一下的是Path环境变量,当我们在cmd中输入命令时,Windows首先会在当前目录中寻找可执行文件或脚本,如果没有找到,Windows会接着遍历环境变量Path中定义的路径。由于我们将%M2_HOME%\bin添加到了Path中,而这里%M2_HOME%实际上是引用了我们前面定义的另一个变量,其值是Maven的安装目录。因此,Windows会在执行命令时搜索目录D:\bin\apache-maven-3.0\bin,而mvn执行脚本的位置就是这里。

明白了环境变量的作用,现在打开一个新的cmd窗口(这里强调新的窗口是因为新的环境变量配置需要新的cmd窗口才能生效),运行如下命令检查Maven的安装情况:

C:\Users\Juven Xu>echo %M2_HOME%

C:\Users\Juven Xu>mvn –version

运行结果如图2-3所示:


 图2-3 Windows中检查Maven安装

第一条命令echo %M2_HOME%用来检查环境变量M2_HOME是否指向了正确的Maven安装目录;而mvn –version执行了第一条Maven命令,以检查Windows是否能够找到正确的mvn执行脚本

 

3.   Eclipse 集成maven

3.1  m2eclipse插件 

提供maven的pom编辑, jar包依赖管理、搜索等,其他工具的eclipse工具如svn,搜索依赖

3.1.1         m2e 官方url  http://www.eclipse.org/m2e/download/

插件下载site  http://download.eclipse.org/technology/m2e/releases

Eclipse 安装插件参考maven指南.

4.   Eclipse  集成jetty

 

前提工程需要满足maven的默认目录结构,如果没有需要特殊配置。

文档目录: http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html

 

4.1  方式一通过pom.xml的plugs插件配置方式一

第一步:添加pom.xml的插件,jetty版本9需要jdk1.7支持

                   jetty版本8需要jdk1.6支持

                                     <plugin>

                <groupId>org.eclipse.jetty</groupId>

                <artifactId>jetty-maven-plugin</artifactId>

                <version>9.1.3-SNAPSHOT</version>

    </plugin>

    到对应的pom.xml目录下面执行mvn jetty:run 就可以了

4.2  方式二在maven的安装目录下面的setting.xml在pluginGroups添加如下配置

                            默认maven是不识别jetty的命令

                            <pluginGroup>org.mortbay.jetty</pluginGroup>

                   第三步 执行命令 mvn jetty:run 运行jetty.能访问首页基本ok

 

4.3  方式三通过 eclipse的software sites 配置

Pom.xml的jetty插件 

jetty 官方文档http://code.google.com/p/run-jetty-run/wiki/GettingStarted

eclipse集成jetty  site地址http://run-jetty-run.googlecode.com/svn/trunk/updatesite

效果

添加software插件

Jetty部署工程配置

运行:右击project-选择runas/debug as –run jetty

效果

 

5.   pom.xml配置说明

 

 

如果工程目录结构不是maven默认结构,需要特别指出,同时需要在.classpath 配置jar包输出目录。

6.   maven的工程继承

5.1父工程、其实父工程就是一个pom.xml没有其他内容,用它主要目的是消除重复.

如jar包依赖的版本配置,插件的配置,环境的配置,仓库配置等等,即一处定义,多处使用.

下图是父工程的pom.xml配置

                  

下图是子工程的pom.xml,其中需要声明

7.   基于maven配置开发,测试,发布环境

 

需要被替换的环境配置

开启占位符的拦截替换,否则环境配置替换就不会生效.

 

打包指定环境 mvn clean package –P product

 

8.    基于maven发布jar包到远程仓库

发布jar 到远程仓库,其他人如果有依赖此jar包的话,在编译的时候就会自动下载,下载不到就会报错.

Pom.xml仓库配置

Maven的用户认证

         Maven安装目录的下面conf下面的setting.xml配置用户信息

9.   Maven聚合功能

会想要一次构建多个模块,而不是到每个模块下分别执行打包命令?

maven聚合就是为这一需求服务的?

 

 

 

 

10.             Dao 测试dbunit 集成

后期补上

 

11.             Maven 常用命令

打包 mvn clean package 其中clean 是把target目录清除重新生成,

           Mvn package 打包默认经过一系列过程,每一个操作其实对于一个生命周期

 Mvn deploy 发布

Mvn jetty:run 启动jetty 容器

后缀参数-P  选择环境配置既profile的id

-D给参数赋值

 

具体命令可以参考maven官方文档对于的插件命令

自动化部署开始搭建

Maven 仓库安装nexus          

1:下载、安装,启动nexus安装包

下载地址http://www.sonatype.org/nexus/

                   下载之后解压 在linux下面用 tar  xvf  文件名称  命令

                   在解压之后的文件目录下面查找bin目录,下面有一个nexus文件用于linux启动的命令,nexus.bat 是window下面的启动命令

启动好之后访问nexus,同时linux启动nexus会提示说需要root才启动、

按如下修改才可以

 

地址http://ip:8081/nexus/index.html#view-repositories;public~configuration

用户名和密码默认是admin和admin123

·        登陆之后,点击 Repositories添加仓库组,这样以后需要的仓库只需要配置这个仓库组就可以,要不然如果你的仓库有很多,就需要有几个仓库配置多次。安装很简单

 

 

2. pom文件主要的配置

 

<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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com</groupId>

    <artifactId>avcp</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <packaging>war</packaging>

    <name>avcp-</name>

    <url>http://maven.apache.org</url>

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <spring.version>3.1.4.RELEASE</spring.version>

        <slf4j.version>1.7.5</slf4j.version>

    </properties>

    <distributionManagement>

        <repository>

            <id>releases</id>

            <name>Public Repositories</name>

            <url>http://172.22.1.158:8081/nexus/content/repositories/releases</url>

        </repository>

        <snapshotRepository>

            <id>snapshots</id>

            <name>Public Repositories</name>

            <url>http://172.22.1.158:8081/nexus/content/repositories/snapshots</url>

        </snapshotRepository>

    </distributionManagement>

    <repositories>

        <repository>

            <id>snapshots</id>

            <name>Public Repositories</name>

            <url>http://172.22.1.158:8081/nexus/content/groups/public-snapshots</url>

            <releases>

                <enabled>true</enabled>

            </releases>

            <snapshots>

                <enabled>true</enabled>

            </snapshots>

        </repository>

        <repository>

            <id>releases</id>

            <url>http://172.22.1.158:8081/nexus/content/groups/public</url>

            <name>Public Repositories</name>

            <releases>

                <enabled>true</enabled>

            </releases>

            <snapshots>

                <enabled>false</enabled>

            </snapshots>

        </repository>

    </repositories>

    <dependencies>

        <dependency>

            <groupId>com</groupId>

            <artifactId>avcp-common</artifactId>

            <version>1.023</version>

        </dependency>

    </dependencies>

 

 

    <build>

        <finalName>${project.name}-${prefix.revision}-${BUILD_ID}</finalName>

        <resources>

            <!-- 资源文件的配置默认配置文件目录: src/main/resources 不需要配置此项,不是需要配置此项指定 -->

            <resource>

                <directory>${basedir}/src/main/resources</directory>

                <!-- 资源环境的配置拦截替换 -->

                <filtering>true</filtering>

            </resource>

        </resources>

        <plugins>

            <plugin> 

            <groupId>com.google.code.maven-svn-revision-number-plugin</groupId> 

            <artifactId>maven-svn-revision-number-plugin</artifactId> 

            <version>1.6</version> 

            <configuration> 

                 <verbose>true</verbose> 

                 <entries> 

                      <entry> 

                      <prefix>prefix</prefix> 

                      <depth>empty</depth> 

                  </entry> 

                 </entries> 

            </configuration> 

            <executions> 

                 <execution> 

                      <phase>validate</phase> 

                          <goals> 

                          <goal>revision</goal> 

                          </goals> 

                 </execution> 

            </executions> 

            <dependencies> 

                    <dependency> 

                        <groupId>org.tmatesoft.svnkit</groupId> 

                        <artifactId>svnkit</artifactId> 

                        <version>1.7.8</version> 

                    </dependency> 

               </dependencies> 

            </plugin> 

            <plugin>

                <groupId>org.eclipse.jetty</groupId>

                <artifactId>jetty-maven-plugin</artifactId>

                <version>9.1.3.v20140225</version>

            </plugin>

            <!-- 制定java编译的jdk版本和运行的jdk版本 -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-dependency-plugin</artifactId>

                <version>2.8</version>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-eclipse-plugin</artifactId>

                <version>2.8</version>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.1</version>

                <configuration>

                    <source>1.6</source>

                    <target>1.6</target>

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-resources-plugin</artifactId>

                <version>2.6</version>

                <configuration>

                    <encoding>UTF-8</encoding>

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-war-plugin</artifactId>

                <version>2.4</version>

                <configuration>

                     <webResources> 

                        <resource> 

                            <directory>src/main/resources</directory> 

                            <filtering>true</filtering> 

                            <targetPath>WEB-INF/classes</targetPath> 

                        </resource> 

                    </webResources>  

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.apache.tomcat.maven</groupId>

                <artifactId>tomcat6-maven-plugin</artifactId>

                <version>2.2</version>

            </plugin>

        </plugins>

    </build>

    <!-- 环境配置 -->

    <profiles>

        <!-- 开发 -->

        <profile>

            <id>develop</id>

                <activation>

                <!-- 默认开发环境 -->

                <activeByDefault>true</activeByDefault>

            </activation>

            <properties>

                <gift.rank.total.rank>25</gift.rank.total.rank>

            </properties>

        </profile>

        <!-- 测试 -->

        <profile>

            <id>test</id>

            <properties>

                <gift.rank.total.rank>15</gift.rank.total.rank>

               

            </properties>

        </profile>

        <!-- 发布 -->

        <profile>

            <id>product</id>

            <properties>

                <gift.rank.total.rank>15</gift.rank.total.rank>

               

            </properties>

        </profile>

    </profiles>

</project>

Svn安装

                   这个目前公司都会选择安装这个不做说明

Hudson安装

1.下载安装

下载地址

http://eclipse.org/downloads/download.php?file=/hudson/war/hudson-3.1.2.war

 

下载之后是一个war,可以放到tomcat,jetty等容器,也可以采用java -jar hudson.war 启动,我是在window7下面 采取java -jar hudson.war 这种启动。因为window下面安装vpn访问线上服务器需要。Linux就不知道能否可以。

启动之后访问该地址http://ip:8080就可以。把他做window服务器启动

 

 

2:配置hudson

     配置之前,先注册一个账号登陆。登陆之后点击系统管理进行基本设置

设置如下有jdk,maven,svn版本,window下面的命令执行脚本目录

插件安装,这个按个人所需

 

 

3具体项目配置

由于windows下面不支持ssh命令所以才putty工具进行类似scp,ssh等协议命令支持,下载putty工具解压之后、放在windows\system32\目录下面

开始配置

 

执行命令需要的工具putty网上下载、用puttygen.exe生成密钥、生成迷药需要鼠标移至在动

 

生成密钥

 

密钥如下。

保存密钥 save private key 如下面的4.29pri.ppk,这个密钥上面命令指定了这个密钥,保证下次访问不需要提供密钥,但是第一次需要输入y所以上面命令才在前面加ehco y|这个命令

接着把public key for ****这个拷贝下来保存到linux服务的/root/.ssh目录下面的authorized_keys文件里面,如下图

 

命令1 exec1.sh

 

#/bin/bash

mypath="/app/fam/apps"

mypath1="/app/fam/fam"

if [ ! -d "$mypath/" ];

then 

echo ---------------------------- mkdir -p "$mypath/" ----------------------------

mkdir -p "$mypath/"

fi

if [ ! -d "$mypath1" ];

then 

echo ---------------------------- mkdir -p"$mypath1" ----------------------------

mkdir -p "$mypath1"

fi

cd "$mypath1/"

echo ---------------------------- rm  -rfv $mypath1/*.war ----------------------------

rm -rfv   $mypath1/*.war

 

 

命令2 exec2.sh

其中warfile="$myPath1/*.war” 因为exec1.sh已经删除该目录下面任何war包,而pscp则在删除之后上传,所以执行exec2.sh就保证该目录只有最新上传的一个war目录

思路:先杀死tomcat 进程、判断war是否存在、存在吧tomcat配置指定加载的目录删除下面所有文件,而我这里删除不包括html和ftl文件ls | grep -v   *.war      | grep -v       *.html     |       xargsrm –rf。之后解压war包,在启动tomcat。之后在备份war到其他目录,最后把现网备份目录下面的所有war列出来,在回滚工程的时候就可以选择哪个一个war包。

Exec2.sh

#!/bin/bash

myPath="/app/fam/apps"

myPath1="/app/fam/fam"

temdate=$(date +%Y%m%d%H%M%S)

warfile="$myPath1/*.war"

for i in $(ps aux | grep   fam |grep java  |awk '{print $2}')

do

echo -----------------------------------------------kill -9$i---------------------

kill -9 $i

done

#

cd  $myPath1/

 

if [ -n "$warfile" ];

then 

echo ----------------------------------------------- $warfile   is  exist

shopt -s extglob

ls | grep -v       *.war      |  grep -v       *.html    |       xargsrm -rf

echo ------------------------------------------------unzip  -o $warfile -d $myPath1/--------------------

unzip -o  $warfile -d  $myPath1/

else echo ----------------------------------------------- $warfile   is not exist

fi

#

echo ------------------------------------------------/app/fam/apache-tomcat-6.0.14/bin/startup.sh---------------------

/app/fam/apache-tomcat-6.0.14/bin/startup.sh

 

if [ -n "$warfile" ];

then

echo -----------------------------------------------cp -r -f  $warfile $myPath/ ---------------------

cp -r -f $warfile  $myPath/

echo -----------------------------------------------rm  -rf $warfile---------------------

rm -rf  $warfile 

fi

echo ------------------------------------------------------------------------------------history  war        FileNamestart         ----------------------------

pwd

for i in $(ls -t $myPath/ |awk '{print$1}')

do

echo history  war:  $i

done

echo ------------------------------------------------history  war         FileNameend--------------------

 

 

 

 

回滚execRoll.Sh

回滚命令

部署到现网需要安装vpn。到此部署ok。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值