publish over ssh插件能够容许jenkins经过ssh登陆服务器传输文件并执行脚原本执行发布操做。java
1.安装插件,略web
2.使用ssh-keygen为jenkins单独生成一个证书,将公钥放到须要发布应用服务器上,我生成在了jenkins的data目录下,以避免和root用户默认的证书冲突 注意:必定要在jenkins服务器上以jenkins的tomcat的启动用户去ssh username@ip ,当问到是否加入指纹时选yes,把指纹加进known_hosts,否则jenkins使用publish over ssh时会一直超时tomcat
3.配置插件,进入 系统管理 -》 系统设置 里的 Publish over SSH 添加证书信息:需填写生成私钥的密码,可填写私钥文件的路径或填写私钥文件的内容 添加服务器: 不用多说了,最后test configuration看是否成功ssh服务器
1.在job中点击 Post Steps -》 Add post-build step,选中Send files or execute commands over SSHapp
2.配置传输的文件及执行的命令 Name:选择你要发布的服务器 source files:填写要传输的文件,当前路径为workspace,点右边问号看还支持通配符 remove prefix:移除目录 remote directory:测试下来写绝对路径没用,要是想放到非用户home目录下的话去系统设置里改remote directoryssh
exec commands单独说 无非就是几个过程curl
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