jenkins远程部署play framework项目时遇到的问题及解决办法

来源:互联网 发布:全国行政区街道数据库 编辑:程序博客网 时间:2024/05/02 01:31

这篇不讲解如何用Jenkins进行远程部署和远程启动项目,只是讲解遇到的问题。

最近公司要求让我把一个直播的项目,利用Jenkins来实现自动化部署。
项目目录结构是这样(项目根目录weblive-test/):
|—app
|—conf
|—lib
|—public
|—precompiled(使用play precompile命令生成出来的)

问题一、使用tar进行打包压缩。

该问题很简单,如果是打包该目录下所有的文件,使用以下:

tar -czf weblive-test.tar.gz *
又因为项目的部署,并不是把目录下的所有文件都进行远程部署。比如:lib文件夹、conf文件夹(除里面routes文件)。因为这些文件并不是经常要更改的,一般在搭建项目框架时,就基本确了。就算后期有需要更改的,可以单独把文件上传到远程服务器中。这也就意味着我打包时,需要去指定打包哪些文件。
tar -czf weblive-test.tar.gz ./app ./conf/routes ./precompiled ./public
这里给出我构建时完整的shell脚本
#!/bin/bashexport PATH=/opt/play-1.2.7:$PATH#获得当前目录cur=$(pwd)echo "pwd:"${cur}echo `date +%Y%m%d`#编译play precompile#进行打包和压缩,方便传输rm -rf weblive-test.tar.gztar -czf weblive-test.tar.gz ./app ./conf/routes ./precompiled ./public

关于tar命令的教程可以参考:

tar命令教程> http://www.ilanni.com/?p=7191

项目备份

公司要求,每次远程部署时,要保存近期的项目。比如:今天是11月1号,那么远程部署时,保存今天的备份,把昨天的备份删除,以免自动化备份过多,占空间。删除备份包代码如下:
#获取当前时间currday=`date +%Y%m%d`rm -rf `ls | grep "weblive-test-20" | grep -v weblive-test-$currday`
上面代码意思是,先获取当前时间(因为我备份项目会加上备份时间);再去查找`"weblive-test-20"`,开头的文件,这里的20,是指年的意思;就是说它可以配20开头的年份,比如2016年、2020年、2030年。`grep -v weblive-test-$currday`这句的意思是 参数-v,是取反的意思。整句话的意思就是,删除weblive-test项目中20开头的备份文件,但是不删除今天的备份。

这里写图片描述

图片中也有.bak结尾的备份,但是公司要求,显示备份时间,所以我改成红色标记的那种。

判断文件夹或是文件是否存在

#创建最新的备份包webfile=${cur}/weblive-test-$currdayif [ ! -d $webfile ]; thenecho "不存在":$webfile#备份cp -r weblive-test weblive-test-$currdayfi
这里需要注意的地方就是if[],中括号里的前后空格不是多余的,一定要写。参数 -d 是用来判断文件夹是否存在参数 -f 是用来判断文件是否存在

清空远程项目目录

#清空weblive-test里面的文件#rm -rf weblive-test/*
只是清空目录,目录本身不删除,因为之前tar打包的并不是所有的文件,所以,该目录其实是不能清空的,比如里面的lib、conf、文件夹是不能删除。所以这段代码我是注释掉的。

解压缩

#解压缩包tar -xf weblive-test.tar.gz -C weblive-test/#删除压缩包rm -rf weblive-test.tar.gz
上面给过参考链接了,这里说明下,tar解压时,是可以指定解压目录的,只不过要先创建才行。解压gzip压缩包和bzip2压缩包,都可以使用tar -xf命令来解压。删除没什么好讲解的!可以参考

shell中删除命令使用> http://blog.csdn.net/taiyang1987912/article/details/41488395#t7

项目的启动

cd /home/webuser/gogoal_platform/weblive-test/echo "pwd:"`pwd`cp /dev/null nohup.outnohup ./weblive-test.sh

weblive-test.sh脚本的内容:

#!/bin/bashexport PATH=~/play-1.2.7:$PATHplay1 stopplay1 start
公司使用的是play framework框架。所以启动项目也是使用play命令,这里我使用的是play1,是因为公司架构师把它改造了。这里要重点强调下:经过我多次尝试,如果启动项目的命令,直接写到Jenkins的脚本里,项目启动不了,非要我在远程服务器里写好脚本后,再到Jenkins里面去调取,就可以啦。nohup,是后台启动的意思。要是没有加这个的话,项目也启动不了。

下面给出完整构建后操作的脚本

#!/bin/bashexport PATH=~/play-1.2.7:$PATHecho "构建后的路径pwd:"`pwd`cd /home/webuser/gogoal_platform/cur=$(pwd)echo "pwd:"${cur}currday=`date +%Y%m%d`#删除weblive-test的备份包rm -rf `ls | grep "weblive-test-201" | grep -v weblive-test-$currday`#创建最新的备份包webfile=${cur}/weblive-test-$currdayif [ ! -d $webfile ]; thenecho "不存在":$webfilecp -r weblive-test weblive-test-$currdayfi#清空weblive-test里面的文件#rm -rf weblive-test/*#解压缩包tar -xf weblive-test.tar.gz -C weblive-test/#删除压缩包rm -rf weblive-test.tar.gzcd /home/webuser/gogoal_platform/weblive-test/echo "pwd:"`pwd`cp /dev/null nohup.outnohup ./weblive-test.sh
1 0
原创粉丝点击