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