java jenkins 热_JavaWEB学习记录--Jenkins自动部署Maven项目

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

标签(空格分隔): javaWEB

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

1.部署方式的选择

1.1 tomcat上传

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

7c836ce223de

这里写图片描述

7c836ce223de

这里写图片描述

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

这样做没法对之前的项目备份

这种部署方式会导致tomcat内原项目的很多资源释放不掉,部署多次后会报OutOfMemoryError这个错误.

需要tomcat内有manage项目,安全性不够,容易被利用

基于这些考虑,抛弃了这种方案.

1.2使用脚本部署

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

7c836ce223de

这里写图片描述

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

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的话就没问题.

7c836ce223de

这里写图片描述

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 [tomcat port] [tomcat home dir]

if [ $# -lt 1 ]; then

echo "you must use like this : ./deploy.sh [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 [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:要执行的命令,也就是执行自定义脚本,这里需要以~/开始,不然没法执行,也不知道是不是只有我遇到了这个问题.

7c836ce223de

这里写图片描述

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日志,是关闭重启的话则证明构建有效.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值