公司的开发环境每次部署项目都很麻烦,需要手动打包并上传上去。这个太麻烦了,所以就准备搞个自动打包的脚本。脚本自动从svn代码库里面更新最新的代码下来,然后maven打包,最后把war包丢到tomcat里面去。其实搞个Jenkins就完事了,但是还是想自己写个脚本玩玩,因此特意记录下自己写这些脚本的过程,方便后续查阅。

一、环境介绍

        CentOs6.9 + svn + maven

二、编写maven打包脚本

        这里先提一下,公司有个公共的框架项目framework,其他项目都依赖了它。所以其他项目打包前,都需要mvn install 一下这个公共框架项目。这个 mvn 命令执行后,想获取是编译成功还是失败了,就需要点技巧了。下面说说怎么获取mvn install 后是否编译成功的方案。
    一般来说,如果mvn install 后出现了BUILD SUCCESS字眼,那就说明是编译成功了。所以我们把 mvn命令的输出内容直接存放到一个文件中,然后我们在文件中查询有没有BUILD SUCCESS这个字符串,如果有就说明是编译成功了。

        下面为maven install 公共框架framework项目的脚本代码(/root/workspace/mvnscript/install_framework.sh):
#!/bin/sh
# this is maven install framework script
echo "[The install framework script is running.....]"
# go to framework dir
cd /root/workspace/framework # 定义该脚本的临时文件的名字
TmpFileName=/tmp/framework_sh_tmp # 先把原来的这个脚本的临时文件删除
rm -rf ${TmpFileName}* # 获取当前时间
Time=`date +"%Y%m%d%H%M%S"` # 把mvn命令的结果在屏幕显示的同时写入到文件中,文件名为:上面定义的文件名+当前时间
mvn clean install | tee ${TmpFileName}${Time} # 文件中查找 BUILD SUCCESS 字眼
result=`grep 'BUILD SUCCESS' ${TmpFileName}${Time}` # 如果结果为空那就是失败,否则就成功了
if [ -z "$result" ];
then
echo "[ install framework error! -------- you can see the log on ${TmpFileName}${Time}]"
echo "[ ------------------------ script exit!! ------------------- ] "
exit
else
echo "[framework install SUCCESSS] "
fi
echo "[The install framework script is end]"
31
 
1
#!/bin/sh 
2
# this is maven install framework script
3
echo "[The install framework  script is running.....]"
4
# go to framework dir
5
cd /root/workspace/framework
6

7
# 定义该脚本的临时文件的名字
8
TmpFileName=/tmp/framework_sh_tmp
9

10
# 先把原来的这个脚本的临时文件删除
11
rm -rf ${TmpFileName}*
12

13
# 获取当前时间
14
Time=`date +"%Y%m%d%H%M%S"`
15

16
# 把mvn命令的结果在屏幕显示的同时写入到文件中,文件名为:上面定义的文件名+当前时间
17
mvn clean install | tee ${TmpFileName}${Time}
18

19
# 文件中查找 BUILD SUCCESS 字眼
20
result=`grep 'BUILD SUCCESS' ${TmpFileName}${Time}`
21

22
# 如果结果为空那就是失败,否则就成功了
23
if [ -z "$result" ];
24
then
25
 echo "[ install framework error! --------  you can see the log on ${TmpFileName}${Time}]"
26
 echo "[ ------------------------ script exit!!  ------------------- ] "
27
 exit
28
else
29
 echo "[framework install SUCCESSS] "
30
fi
31
echo "[The install framework script is end]"
        下面为maven打包sp项目的脚本代码(/root/workspace/mvnscript/package_sp.sh):
#!/bin/sh
# this is maven package sp script
echo "[The package sp script is running.....]"
# go to sp dir
cd /root/workspace/sp # 定义该脚本的临时文件的名字
TmpFileName=/tmp/sp_sh_tmp # 先把原来的这个脚本的临时文件删除
rm -rf ${TmpFileName}* # 获取当前时间
Time=`date +"%Y%m%d%H%M%S"` # 把mvn命令的结果在屏幕显示的同时写入到文件中,文件名为:上面定义的文件名+当前时间
mvn clean package | tee ${TmpFileName}${Time} # 文件中查找 BUILD SUCCESS 字眼
result=`grep 'BUILD SUCCESS' ${TmpFileName}${Time}` # 如果结果为空那就是失败,否则就成功了
if [ -z "$result" ];
then
echo "[ package sp error! -------- you can see the log on ${TmpFileName}${Time}]"
echo "[ ------------------------ script exit!! ------------------- ] "
exit
else
echo "[ sp package SUCCESSS] "
fi
echo "[The package sp script is end]"
x
 
1
#!/bin/sh
2
# this is maven package sp script
3
echo "[The package sp script is running.....]"
4
# go to sp dir
5
cd /root/workspace/sp
6

7
# 定义该脚本的临时文件的名字
8
TmpFileName=/tmp/sp_sh_tmp
9

10
# 先把原来的这个脚本的临时文件删除
11
rm -rf ${TmpFileName}*
12

13
# 获取当前时间
14
Time=`date +"%Y%m%d%H%M%S"`
15

16
# 把mvn命令的结果在屏幕显示的同时写入到文件中,文件名为:上面定义的文件名+当前时间
17
mvn clean package | tee ${TmpFileName}${Time}
18

19
# 文件中查找 BUILD SUCCESS 字眼
20
result=`grep 'BUILD SUCCESS' ${TmpFileName}${Time}`
21

22
# 如果结果为空那就是失败,否则就成功了
23
if [ -z "$result" ];
24
then
25
 echo "[ package sp error! --------  you can see the log on ${TmpFileName}${Time}]"
26
 echo "[ ------------------------ script exit!!  ------------------- ] "
27
 exit
28
else
29
 echo "[ sp package SUCCESSS] "
30
fi
31
echo "[The package sp script is end]"

        上面这个两个脚本主要目的其实是为了在执行maven命令的同时获取maven执行的结果,如果install或者package失败了,直接给出提示,并退出脚本。
       

三、编写自动svn更新代码+maven打包并发布的脚本

    因为sp项目依赖framework项目,所有每次都要先更新framework项目,然后再install。这样sp项目打包后的framework的依赖才是最新的。
  • 具体步骤为:
    • svn命令更新framework项目
    • svn命令更新sp项目
    • maven命令install公共框架项目framework
    • maven命令打包sp项目
    • 停止tomcat
    • 删除tomcat里面的项目
    • 把新打包好的项目copy到tomcat中
    • 启动tomcat
  • 脚本代码为(/root/deploy_sp.sh):
# 此脚本用于自动从svn上面更新sp代码并打包
cd /root/workspace/framework
echo "[ update framework from svn....]"
svn update
cd /root/workspace/sp
echo "[ update sp from svn....]"
svn update
echo "[ maven install framework ....]"
#导入安装framework脚本
source /root/workspace/mvnscript/install_framework.sh
echo "[ maven package sp....]"
#导入打包sp脚本
source /root/workspace/mvnscript/package_sp.sh
#打包完成后先停止tomcat
/root/tomcat-instance/shutdown_sp.sh
#删除tomcat里面原来的sp相关的war包和文件夹
rm -rf /root/tomcat-instance/sp-tomcat/webapps/sp*
#copy新的war包到tomcat里面
cp /root/workspace/sp/sp-deploy/target/sp.war /root/tomcat-instance/sp-tomcat/webapps/sp.war
echo "[ sp.war copy SUCCESS ]"
#重新启动tomcat
/root/tomcat-instance/sp-tomcat/bin/startup.sh
cd ~
echo [" sp deploy SUCCESS "]
 
1
# 此脚本用于自动从svn上面更新sp代码并打包
2
cd /root/workspace/framework
3
echo "[ update framework from svn....]"
4
svn update
5
cd /root/workspace/sp
6
echo "[ update sp from svn....]"
7
svn update
8
echo "[ maven install framework ....]"
9
#导入安装framework脚本
10
source /root/workspace/mvnscript/install_framework.sh
11
echo "[ maven package sp....]"
12
#导入打包sp脚本
13
source /root/workspace/mvnscript/package_sp.sh
14
#打包完成后先停止tomcat
15
/root/tomcat-instance/shutdown_sp.sh
16
#删除tomcat里面原来的sp相关的war包和文件夹
17
rm -rf /root/tomcat-instance/sp-tomcat/webapps/sp*
18
#copy新的war包到tomcat里面
19
cp /root/workspace/sp/sp-deploy/target/sp.war /root/tomcat-instance/sp-tomcat/webapps/sp.war
20
echo "[ sp.war copy SUCCESS ]"
21
#重新启动tomcat
22
/root/tomcat-instance/sp-tomcat/bin/startup.sh
23
cd ~
24
echo [" sp deploy SUCCESS "]

    这个脚本代码里有个好玩的东西就是用了source这个命令来实现类似于静态包含的功能,把其他脚本的内容导入进来。为什么要用这个东西?直接调用其他脚本不就好了。

        主要原因是那两个安装脚本和打包脚本有退出的功能,如果mvn命令执行失败,是直接退出了。如果我直接用调用的方式,就不能实现调用第一个脚本失败后,退出整个脚本;会出现第二个脚本继续执行的情况。这不是我想要的结果,我希望第一个脚本失败后就直接结束了。因此百度了一下怎么才能实现这种包含的功能,后面发现用source能够实现把其他脚本的内容导入到当前脚本来执行的功能。这个和java的jsp的静态包含的效果是类似的,因为它是相当于把其他脚本的内容拿到当前脚本来执行了,所以第一个脚本执行exit命令就相当于把整个脚本退出了。

    source命令导入功能参考链接:http://www.runoob.com/linux/linux-shell-include-file.html

四、小结

    (1)通过查找mvn命令执行后的关键字的方法来实现判断mvn命令是否执行成功
    (2)通过source命令来实现脚本的静态包含,从而实现导入的脚本中exit时可以退出整个脚本
        (3)其实也可以通过 $? 来判断mvn命令的执行结果
  

Linux下Maven+SVN自动打包脚本的更多相关文章

  1. linux下使用shell 自动执行脚本文件

    以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 文件内容: #将tomcat ...

  2. 在Linux下使用gradle自动打包

    一.下载软件包 1.下载地址 wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz wget http://services ...

  3. linux下简单的备份的脚本 2 【转】

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26807463&id=4577034 之前写过linux下简单的 ...

  4. React Native开发中自动打包脚本

    React Native开发中自动打包脚本 在日常的RN开发中,我们避免不了需要将我们编写的代码编译成安装包,然后生成二维码,供需要测试的人员扫描下载.但是对于非原生的开发人员来说,可能不知如何使用X ...

  5. Linux下安装SVN,仓库创建,用户权限管理

    Exported from Notepad++           Linux下安装SVN,仓库创建,用户权限管理 1.SVN安装 Ubuntu系统下安装:sudoapt-getinstallsubv ...

  6. ​Linux下的SVN服务器搭建

    ​Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总 ...

  7. linux下安装svn

    linux下SVN服务器如何搭建和使用 | 浏览:12117 | 更新:2013-09-18 14:28 | 标签:linux linux下SVN服务器如何搭建和使用?说到SVN服务器,想必大家都知道 ...

  8. linux下搭建svn本地服务器

    在linux下搭建svn本地服务器可以很好的管理自己的代码,具体过程如下: # mkdir svn_local # cd svn_local  # svnadmin create led_diplay ...

  9. xcode8.3 shell 自动打包脚本 记录

    题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...

随机推荐

  1. 微信小程序开发1-入门知识准备

    注:一个物联网专业的学生狗,平时学习较多的是嵌入式编程方面的知识,最近可能是闲的蛋疼,想要研究研究客户端开发,对于网页,手机Android客户端从来没有接触过,因此所有东西都要从头来过,慢慢学习.不过 ...

  2. 闲聊jQuery(一)

    Write less, do more. 这便是jQuery的宗旨!jQuery,一个高效.精简并且功能丰富的 JavaScript 工具库. 想必,对于每一个前端开发者,一定用过jQuery吧!俗话 ...

  3. oracle EBS rtf报表不能输出模板样式

    1.需要定义中文的数据定义 2.缺少文件 cd $ADMIN_SCRIPTS_HOME prefs.ora 3.查看文档  文档 ID 1059712.1 (1)请求模版显示不出来 解决:模版定义中模 ...

  4. NodeJS自定义模块

    //1.创建测试模块js文件(我这里命名为test.js) //2.添加测试方法 function test(){ console.log('Test Success!'); } //3.公开该方法到 ...

  5. myeclipse配置jboss

    一 相关软件准备 jdk1.6     Myeclipse    jboss 6.1 下载地址:http://www.jboss.org/jbossas/downloads/二 安装 下载完jboss ...

  6. 根据模板导出Excel报表并复制模板生成多个Sheet页

    因为最近用报表导出比较多,所有就提成了一个工具类,本工具类使用的场景为  根据提供的模板来导出Excel报表 并且可根据提供的模板Sheet页进行复制 从而实现多个Sheet页的需求, 使用本工具类时 ...

  7. oracle数据库中如何去除空格

    目前,我所知道的就有两种方法: 一.trim(a)--只能去除字符串左右的空格 select trim(leading from ' ——11—— ') aa from dual; select tr ...

  8. tp5 migrate数据库迁移工具

    tp5相对与tp3.2有很大的不同 migrate是其中一点,通过migrate程序员可以在php代码中创建数据库修改回滚等操作 首先下载migrate扩展,命令行到当前项目目录下执行 compose ...

  9. October 22nd, 2017 Week 43rd Sunday

    Yesterday is not ours to recover, but tomorrwo is ours to win or lose. 我们无法重拾昨天,但我们可以选择赢得或者输掉明天. Eve ...

  10. LeetCode 休闲计划

    老年退役选手的 LeetCode 休闲之旅 前言 不知不觉两年多的大学时光悄然流逝,浑浑噩噩的状态似乎从来没有离开过自己. 这两年刷题似乎一直是常态.在退役之后的现在,深感有些东西一段时间没有接触,很 ...