jenkins远程发布应用到tomcat中,使用shell脚本或jenkins deploy插件

Jenkins将构建完成后的war包部署到tomcat有很多方式可操作,本文介绍两种操作, 分别是使用jenkins的Deploy to container Plugin插件及执行linux ssh方式。

1、使用插件方式,插件为Deploy to container Plugin,需先安装好插件。

配置远程机器的tomcat(本例使用tomcat-7.0.68),因此种方式需使用tomcat管理发布,需首先配置用户

进入tomcat根目录

vi conf/tomcat-users.xml  在标签</tomcat-users>前添加如下代码
  <role rolename="tomcat"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <user username="tomcat" password="tomcat" roles="tomcat,manager-gui,manager-script,manager-jmx,manager-status"/>
  

即授权用户名 tomcat,密码tomcat可操作tomcat管理控制台。

启动tomcat,接下来由jenkins中配置

打开Jenkins的对应需要配置的项目,打开配置,找到“构建后操作”,“增加构建后操作步骤”中选择 Deploy war/ear to a container,打开后Add Container中选择Tomcat 7.x

配置样例如下(更改为实际项目即可)


WAR/EAR files:target/jaxrs-server-0.0.1-SNAPSHOT.war

Context path:jaxrs

Containers
  Manager user name:tomcat
  Manager password:tomcat
  Tomcat URL:http://192.168.88.103:8090/

保存,完成构建即可。这种方式需先保证目录tomcat已经启动方可正常发布(个人建议采用第二种方式,以开发环境为例 tomcat启动后经过反复的删除部署,重新部署,应用的使用过程,可能内存的清理不是非常干净,导致部署不成功,需手工重启)。

2、使用shell脚本部署

所需配置前提:jenkins部署的机器,可直接操作scp ssh远程tomcat机器

在项目的配置中,“构建”->“增加构建步骤” 中选择Execute shell,当然可创建多个

先创建一个Execute shell其中的Command如下,目的是拷贝war包到目标机器上,这一句比较简单只完成拷贝功能

scp -p /project/jenkins_space/workspace/jaxrs-server/target/jaxrs-server-0.0.1-SNAPSHOT.war root@192.168.88.103:/project/jaxrs-server-0.0.1-SNAPSHOT.war

再创建一个Execute shell其中的Command如下,其目的是执行目标机器上的shell脚本

#!/bin/sh

ssh root@192.168.88.103 '/software/apache-tomcat-7.0.68/kill.sh'

ssh root@192.168.88.103 '/software/apache-tomcat-7.0.68/deploy.sh'

在目标机器上创建kill.sh(负责kill tomcat)及deploy.sh,并且chmod修改执行权限。

kill.sh如下

#!/bin/bash
ps -ef | grep '/software/apache-tomcat-7.0.68' | grep -v grep| awk '{print $2}'| xargs kill -9

deploy.sh如下

#!/bin/bash
export JAVA_HOME=/software/jdk1.7.0_67
cd /software/apache-tomcat-7.0.68
rm -rf logs/* work/* webapps/*

cd bin
./startup.sh

cd ..

while true
do
  echo tomcat is running
  str=`grep -e "Server startup in [0-9]\+ ms" logs/*out`

  len=`echo $str|wc -L`

  if [ "$len" -gt 0 ]
    then
      cat logs/*out
      break
    else
      echo please waiting...
  fi

  sleep 5

done

说明:/software/apache-tomcat-7.0.68此tomcat配置指向scp目的war包,deploy.sh为启动tomcat, 由于jenkins无法检测到tomcat是否启动成功,deploy.sh添加了一段shell脚本,通过判断服务器的启动日志是否正常。

结束。


赞赏(Donation)
微信(Wechat Pay)

donation-wechatpay