Jenkins Publish Over SSH 远程自动发布

来源:互联网 发布:淘宝优惠券微信机器人 编辑:程序博客网 时间:2024/06/07 02:44

1、应用场景 
Publish Over SSH 不是将war包发布到tomcat容器下,而是先利用该插件将build好的文件上传到远程linux 的指定目录下,然后利用该插件远程执行脚本将指定目录下的文件复制到tomcat的执行文件夹下,再利用脚本远程重启tomcat即可 。

2、发布环境要求 
远程 tomcat部署在linux上,不支持 windows上远程发布

3、publish over ssh 插件安装和配置 
a、 jenkins 控制台下 系统管理->管理插件->可选插件->通过搜索找到 
“Publish Over SSH”,进行勾选安装。安装完毕重起jenkins网页控制台。 
这里写图片描述
b、配置远程linux SSH的访问权限 
系统管理->系统设置界面,滚动配置界面直至如下位置,会看到了多了Publish over SSH的配置选项,点击“增加”SSH Server,出现如下界面,分别填写远程linux的HostName(登录IP)、userName(linux ssh的用户名)。 
这里写图片描述
4、现在构建一个maven项目来发布 


这里写图片描述
5、填入代码提交的具体位置 
这里写图片描述
6、配置自动构建(每晚凌晨自动构建) 

     Build Triggers 是一个持续集成的触发器插件,可以根据已经完成构建的结果,触发新Job或者传递参数

     默认的选项是Build whenever a SNAPSHOT dependency is built,

      意思是依赖于快照的构建意思是依赖于快照的构建,当代码有更新时就构建项目。

     下面的Build periodically和Poll SCM可以设置定时自动构

       Build periodically:定时构建。工作中更多以这种方式设置构建任务

       Poll SCM:根据监听源代码的版本变化来触发构建,这里" */5 * * * * "代表每5分钟检测一遍git上的源代码,如果源代码发生变化则执行构建


      

    Pre Steps选项用来配置构建前的工作,这里不做更改。

    因为Maven项目,Build 选项有Root POM和Goals and options的设置,使用默认的打包就可以。


7、Post Steps选项设置构建

这里我们将war包拷贝到指定的tomcat的目录,删除项目原来的内容文件夹,并重启Tomcat。


clean 删除target文件夹及其下所有内容 
package生成target目录,编译、测试代码,生成测试报告,生成jar/war文件 
install在本地Repository中安装jar 
mvn source:jar install -Dmaven.test.skip=true给任何目标添加maven.test.skip 属性就能跳过测试,打源码包 
这里写图片描述

8、配置服务器脚本信息

Transfer Set Source Files这个路径默认是在项目的workspace中,因为构建好的war包在target目录中,所以这里指向了target/shop.war。

Remove prefix可以把target/shop.war的target/去掉,这样上传到服务器上就是shop.war,否则它会创建target目录。

    

 domain可以与文件目录不一致。主要是 Sources files要与Jenkins上war的位置一致,package的名称需要与jenkins上war名一致

 #!/bin/bash                                  

#bash shell,shell中的一种,linux一般默认是bash shell


domain="man.picking.wms.dmall.com 


"           #给domain赋值,参数化
package="wms-picking-man-web"                
deployid=${package}_${BUILD_ID}            

 #deployid=wms-picking-man-web_BUILD_ID,BUILD_ID=构建版本号
ports="(9000,8000)"                     
# make sure domain directory exists    
     

 #此句为注释
mkdir -p /web/domains/${domain}             

 #/web/domains/新建文件夹man.picking.wms.dmall.com 
#-p参数:如果没有父目录会直接创建父目录
mkdir -p /web/logs/${domain}
# stop the running tomcat server
ps -aef | grep java|grep "/${domain}/"| grep -v grep | sed 's/ [ ]*/:/g' |cut -d: -f2 |xargs kill -9     

#过滤java进程中包含${domain}的进程传递给xargs
#grep -v grep 过滤掉查询进程                                                                                             

#sed 's/ [ ]*/:/g'将获取到的进程数据,按照空格拆开用:隔开组合,[中间是空格]*匹配1个或多个空格
#cut -d: -f2 取:隔开的第二个字符
#xargs kill -9 等于 kill -9 PID 9是信号变量
#kill -9 pid等于kill -s 9 pid,表示强制,尽快终止一个进程
# unzip package


mkdir "/web/app/${domain}"                 
 #等于 mkdir -p /web/app/${domain}              

mv /web/app/deploy/${package}.war /web/app/deploy/${deployid}.war      #将war包重命名为项目名+构建号      

rm -rf /web/app/${domain}/*                           #删除所有原目录下所有文件

echo "deploy ${domain} application"   #打印提示:deploy man.picking.wms.dmall.com 

application
unzip /web/app/deploy/${deployid}.war -d /web/app/${domain} 
          #将需要部署的war包,解压到/web/app/man.picking.wms.dmall.com 

#此文件夹为代码库
domain_conf="/web/servers/tengine/conf/domains/${domain}.conf"          
if [ ! -f "${domain_conf}" ]; then                                 
#如果配置文件domain_conf不存在

cp /home/dmadmin/deploy/domain.conf ${domain_conf}              #将/home/dmadmin/deploy/domain.conf拷贝到domain_conf去

sed -i "s/{domain}/${domain}/g" ${domain_conf}          #将domain_conf文件中所有{domain}替换${domain}

else
sed -i "/weight=10 max_fails=2 fail_timeout=30s;/d" ${domain_conf}    
#否则,删除weight=10 max_fails=2 fail_timeout=30s;这行

fi
# deploy
for port in $ports;                                                   #ports中有多少个参数就执行多少次
do
port=${port//(/}                                                      #去括号,port=9000,800)
port=${port//)/}
# tomcat connection port
sd_port=`echo $port|cut -d "," -f1`                        #将port元素按照“,”分开,取第一个数
# tomcat shutdown port
conn_port=`echo $port|cut -d "," -f2`
# insert upstream into nginx domain

 #######
sed -i "1 a    server 172.16.195.30 


:${conn_port}  weight=10 max_fails=2 fail_timeout=30s;" ${domain_conf}     
#在${domain_conf}配置文件中第一行插入服务器数据,nginx监听

#copy conf to 193 server
 scp -P 50027 -i /home/dmadmin/kp-lsq6dded ${domain_conf} root@119.254.210.145:/web/servers/tengine/conf/domains    #当前服务器为172.16.195.30 

#将当前服务器的配置文件domain_conf拷贝到119.254.210.145 

阅读全文
0 0
原创粉丝点击