publish over ssh插件可以允许jenkins通过ssh登录服务器传输文件并执行脚本来执行发布操作。
安装配置publish over ssh插件
1.安装插件,略
2.使用ssh-keygen为jenkins单独生成一个证书,将公钥放到需要发布应用服务器上,我生成在了jenkins的data目录下,以免和root用户默认的证书冲突 注意:一定要在jenkins服务器上以jenkins的tomcat的启动用户去ssh username@ip ,当问到是否加入指纹时选yes,把指纹加进known_hosts,不然jenkins使用publish over ssh时会一直超时
3.配置插件,进入 系统管理 -》 系统设置 里的 Publish over SSH 添加证书信息:需填写生成私钥的密码,可填写私钥文件的路径或填写私钥文件的内容 添加服务器: 不用多说了,最后test configuration看是否成功ssh
配置job使用publish over ssh发布应用
1.在job中点击 Post Steps -》 Add post-build step,选中Send files or execute commands over SSH
2.配置传输的文件及执行的命令 Name:选择你要发布的服务器 source files:填写要传输的文件,当前路径为workspace,点右边问号看还支持通配符 remove prefix:移除目录 remote directory:测试下来写绝对路径没用,要是想放到非用户home目录下的话去系统设置里改remote directory
exec commands单独说 无非就是几个过程
- 初始化变量
- 关闭tomcat
- 把传过来的包备份下,防止日后用来回滚
- 删除tomcat下的war包和解压出来的目录,用新打出来的war包替换
- 启动tomcat
- 检查下tomcat起来没
source /etc/profile #java环境变量
time=`date +%Y-%m-%d-%H:%M:%S`
warname="ROOT.war"
tomcatdir="/data/app/tomcat7"
wardir=$tomcatdir/webapps
pid=`ps aux|grep "\-Dcatalina.home=$tomcatdir" | grep -v grep |awk -F' ' '{print $2}'`
echo "tomcat pid:$pid"
$tomcatdir/bin/shutdown.sh
sleep 5
ps -p $pid && kill -9 $pid
mkdir -p /data/packages/esb/
\cp -f /root/esb/${package_name} /data/packages/esb/${package_name}.$time
rm -rf $wardir/*
\cp -f /data/packages/esb/${package_name}.$time $wardir/$warname
$tomcatdir/bin/startup.sh && sleep 5
pid=`ps aux|grep "\-Dcatalina.home=$tomcatdir"|grep -v grep |awk -F' ' '{print $2}'`
echo "new tomcat pid: $pid"
curl http://127.0.0.1:8080/index.jsp || exit 1