JavaWEB学习记录--Jenkins自动部署Maven项目

JavaWEB学习记录--Jenkins自动部署Maven项目

标签(空格分隔): javaWEB


最近在研究jenkins的自动部署方案,有一些心得,记录下来以帮助其他人.如果对你有帮助记得点下赞哈.


1.部署方式的选择

1.1 tomcat上传

该方式网上很多教程都是这个,使用这个方式的话需要tomcat中有初始时Manage这个项目,本质上是通过http://ip:port/manager/html这个地址的上传接口进行上传,进行热部署.具体如下图:

这里写图片描述
这里写图片描述

这样做有很多弊端:(个人观点,可能因为目前见识短而不够充分认识)

  1. 这样做没法对之前的项目备份
  2. 这种部署方式会导致tomcat内原项目的很多资源释放不掉,部署多次后会报OutOfMemoryError这个错误.
  3. 需要tomcat内有manage项目,安全性不够,容易被利用
    基于这些考虑,抛弃了这种方案.

1.2使用脚本部署

该方案实际上使用jenkins把打包后的war包上传到服务器,上传成功后执行服务器的脚本,该脚本会备份,并强制kill tomcat进程,部署war包后再启动tomcat,具体流程图如下:

这里写图片描述

最终采用了这种方案进行部署.


2.具体部署

2.1安装jenkins,配置

安装这里就不详细讲述了,说下需要的插件
Maven Integration plugin:是的jenkins支持maven任务构建
Publish Over SSH:使得jenkins支持ssh连接上传,并执行对应命令

2.2配置Publish Over SSH插件

设置地址:系统管理/系统设置/Publish over SSH

公共配置:
Passphrase:密码(如果你设置了key,为key的密码,否则为username的密码)
Path to key:key文件(私钥)的路径
Key:将私钥复制到这个框中
Disable exec:禁止运行命令,这个不要勾选,否则没法执行命令
私有配置:
SSH Server Name:标识的名字(随便你取什么)
Hostname:需要连接ssh的主机名或ip地址(建议ip)
Username:用户名
Remote Directory:远程目录
Use password authentication, or use a different key:可以替换公共配置(选中展开的就是公共配置的东西,这样做扩展性很好)
私有配置的高级:
Port:端口(默认22)
Timeout (ms):超时时间(毫秒)默认即可
Disable exec:禁止运行命令
Test Configuration:测试连接

配置完成后测试下,提示success的话就没问题.

这里写图片描述

2.3脚本配置

脚本的主要功能为备份,kill tomcat,部署war包,start tomcat,难点就是怎么kill tomcat,下面结合网上的脚本修改的

使用ps -ef | grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'这个命令来查找指定tomcat的进程id的,解决了一台机器多个tomcat互相间有关联的问题.

#!/usr/bin/bash
#默认变量值
TOMCAT_HOME="/root/apache-tomcat-8.5.6"
TOMCAT_PORT=8080
PROJECT="$1"
#参数检验./deploy.sh <projectname> [tomcat port] [tomcat home dir]
if [ $# -lt 1 ]; then
  echo "you must use like this : ./deploy.sh <projectname> [tomcat port] [tomcat home dir]"  
  exit
fi
if [ ! -n "$2" ]; then
   TOMCAT_PORT=$2
fi
if [ ! -n "$3" ]; then
   TOMCAT_HOME="$3"
fi

#根据端口查找tomcatpid,可能有多个,循环中判断
tomcat_pid=`netstat -anp | grep $TOMCAT_PORT | awk '{printf $7}' | cut -d "/" -f 1`
echo "current :" $tomcat_pid
while [ -n "$tomcat_pid" ]
do
 sleep 5
 #进一步筛选
 tomcat_pid=`ps -ef | grep $tomcat_pid |grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'`
 echo "scan tomcat pid :" $tomcat_pid
 if [ -n "$tomcat_pid" ]; then
   echo "kill tomcat :" $tomcat_pid
   kill -9 $tomcat_pid
 fi
done

#备份路径
BAK_DIR=$HOME/war/bak/$PROJECT/`date +%Y%m%d`
mkdir -p "$BAK_DIR"
cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war

#publish project
echo "scan no tomcat pid,$PROJECT publishing"
rm -rf "$TOMCAT_HOME"/webapps/$PROJECT
rm -rf "$TOMCAT_HOME"/webapps/$PROJECT.war
cp $HOME/war/$PROJECT.war "$TOMCAT_HOME"/webapps/$PROJECT.war

#remove tmp
rm -rf $HOME/war/$PROJECT.war
#start tomcat
"$TOMCAT_HOME"/bin/startup.sh
echo "tomcat is starting,please try to access $PROJECT conslone url"

注意:
脚本如果从win下直接拷贝到linux会出现格式错误,使用vi直接建立个脚本,复制进去即可.
脚本放置在SSH配置的Remote directory下,不然找不到,并且需要给其一定的执行权限,不然也是无法执行.

使用方法:./deploy.sh <projectname> [tomcat port] [tomcat home dir]


2.4任务配置

在构建完成后选择 Send build artifacts over SSH.

Source files:部署的源文件,相对于jenkins的工作目录
Remove prefix:war包对应的前面的路径,可以查看右边的小问号.
Remote directory:配置目录,这个目录会和全局目录叠加,比如我全局目录为/home/web_as + 当前目录/war,为上传目录
Exec command:要执行的命令,也就是执行自定义脚本,这里需要以~/开始,不然没法执行,也不知道是不是只有我遇到了这个问题.

这里写图片描述

2.5 构建测试

点击构建,在构建成功后jenkins控制台会打出下面的日志:

.......
SSH: Connecting from host [DESHOP01.chmpay.com]
SSH: Connecting with configuration [30] ...
SSH: EXEC: STDOUT/STDERR from command [~/deploy.sh api 8090 /home/web_as/api-tomcat] ...
current : 18748
scan tomcat pid : 18748
kill tomcat : 18748
scan tomcat pid :
scan no tomcat pid,api publishing
tomcat is starting,please try to access api conslone url
SSH: EXEC: completed after 10,611 ms
SSH: Disconnecting configuration [30] ...
SSH: Transferred 1 file(s)

如果出现错误可以通过日志来定位,解决.

构建成功后查看tomcat日志,是关闭重启的话则证明构建有效.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容