zoukankan      html  css  js  c++  java
  • 持续集成之Jenkins自动部署war包到远程服务器

    一、无war包链接的情况

    无war包链接时,需先下载war包到本地,然后执行:

    ---------------------------------------------以下部分为转载----------------------------------------------------

    1、下载插件Deploy to container

    首先需要下载一个Jenkins的插件:Deploy to container Plugin ,可以在Jenkins的系统管理->插件管理->可选插件中查找

    下载安装后重启jenkins。

     

    去服务器重启jenkins:

    2、重启Jenkins后,在增加构建后操作步骤中会多出一个选项Deploy war/ear to a container:

     3、新建一个任务,只需要配置代码获取方式和部署war包配置即可。

    WAR/EAR files:输入war包的相对路径,如我的war包在新建目录的target下

    context path:输入用来访问tomcat的名称,localhost:8080/p**

    add container:增加容器,一般选tomcat 7X就可以。这里的username与password需要到tomcat的conf文件夹中的tomcat-users.xml修改。tomcat URL就是你希望把war包部署到的tomcat所在IP地址,最后面不需要再加斜杠/。

    tomcat-users.xml中的用户名及密码默认是注释掉的,所以需要删除注释,也可以直接复制以下代码到</tomcat-users>之前。如果只是删除注释的话好像部署不会成功,还需要增加manager开头的三个role才可以。

      <role rolename="tomcat"/>
      <role rolename="role1"/>
      <role rolename="manager-gui" />
      <role rolename="manager-script" />
      <role rolename="manager-status" />
      <user username="tomcat" password="tomcat" roles="tomcat"/>
      <user username="both" password="tomcat" roles="tomcat,role1"/>
      <user username="role1" password="tomcat" roles="role1"/>
      <user username="deploy" password="tomcat" roles="manager-gui,manager-script,manager-status" />

    4、最后需要启动远程机器上的tomcat服务器,由于不想这一步也需要手动操作,我的办法是在部署war包之前先执行启动tomcat脚本的操作,之后再执行部署。

    我的部分代码,判断是否有包含tomcat-7.0.57/conf/logging.pro字段的进程,如果有则执行关闭tomcat,之后再判断一遍是否关闭成功,如果进程还存在则直接杀进程。

    以下代码保存成ready.sh,不能忘记加执行权限:chmod +x ready.sh

    if test $(ps -ef | grep tomcat-7.0.57/conf/logging.pro |wc -l) -eq 1
    then
    echo "------------no running ,can't shutdown------------"
    else
    echo $(ps -ef | grep conf/logging.pro |wc -l)
    /usr/local/apache-tomcat-7.0.57/bin/shutdown.sh
    echo "------------tomcat shutdowning--------------"
    sleep 30
    if test $(ps -ef | grep conf/logging.pro |wc -l) -eq 1
    then
    echo "------------no running ,can't kill------------"
    else
    ps -ef|grep tomcat-7.0.57/conf/logging.pro |cut -c 9-15|xargs kill -s 9
    echo "------------tomcat killing--------------"
    fi
    fi

    在部署war包之前需要执行的操作:

    1、判断tomcat是否启动,启动则关闭;(中间也可以进行一些备份数据的操作)

    2、休眠10s,给tomcat关闭的时间;

    3、启动tomcat;

    4、休眠20s,给tomcat启动的时间;

    5、最后直接点击job的立即构建即可,war包会自动部署到tomcat的webapp下

    ----------------------------------------------转载部分结束-------------------------------------------------

    (转自https://blog.csdn.net/songjiaping/article/details/51454243)

    二、有war包链接的情况

    1、点击“构建”-执行shell:

    2、写入shell命令:

    3、点击“立即构建”:

     这里我起了两个tomcat,tomcat里放的是服务,tomcat2里放jenkins。

    如果进程数<2,就不用关闭;否则执行关闭命令,再次判断,如果未关闭,就kill掉。

    wget http://${ip}:${port}/software/iFusion_GA/devToPro/iFusion_V4.1-20181106.war
    cd /home/hadoop/.jenkins/workspace/${JOB_NAME}
    mv iFusion_V4.1-20181106.war iFusion4.1_${JOB_NAME}.war
    mv iFusion4.1_${JOB_NAME}.war  /home/hadoop/apache-tomcat-8.5.28/webapps/
    if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
    then
    echo "----------no running, can't shutdown----------"
    else
    cd /home/hadoop/apache-tomcat-8.5.28/bin/
    ./shutdown.sh
    echo "------------tomcat shutdowning--------------"
    sleep 30
    if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
    then
    echo "------------no running ,can't kill------------"
    else
    ps -ef|grep tomcat|grep -v grep|grep -v tomcat2|awk '{print $2}'|xargs kill -9
    echo "------------tomcat killing--------------"
    fi
    fi
    cd /home/hadoop/apache-tomcat-8.5.28/bin
    ./startup.sh 

    还需要执行:

    1)服务的配置工作 

    2)判断服务是否正常启动运行我还没想好该怎么判断 

    3)由于还要触发接口测试工程,为了避免jmeter脚本里的文件夹名(url里的最后部分)改动,目前我决定不改变每次更新的war包名称,解压后都叫同一个名字,最后在发邮件时邮件配置项里再用参数形式,使用jenkins的参数,随给我的链接地址中war包的名字变化。但是jenkins参数保存我还不知道怎么弄。

    2018年11月16日记


    1)服务的配置工作 :我采用移动新配置文件到其他地方,然后将写好的配置文件替换回来的方式(配置文件内容固定,只需修改为我服务器上的ip和端口号)。

    2)判断服务是否正常启动运行我还没想好该怎么判断 :我写了一个while循环专门判断是否启动。

    3)jenkins参数保存使用shell中的$1,每次执行该shell脚本时传入参数,shell会自动识别出来;配置邮件也采用这种方式,使用shell执行python命令,python中有sys.argv专门用来保存执行时取的参数。

    具体shell代码如下:

    #!/bin/bash
    #保存路径、保存war包名########################################
    #testwar="http://xx.xx.xx.xx:1111/software/iFusion_GA/devToPro/iFusion_V4.1-20181121asf.war"
    testwar=$1 #每次执行该脚本时传入参数即可
    cd /software/iFusion_CI/
    touch dir
    echo $testwar >dir
    touch war_filename
    awk -F '/' '{print $NF}' /software/iFusion_CI/dir |awk -F '-' '{print $NF}'>>/software/iFusion_CI/war_filename 
    warfilename="`awk -F '/' '{print $NF}' /software/iFusion_CI/dir`" #``表示执行里面的命令
    #下载war包,删除原应用########################################
    wget $testwar
    cd /home/hadoop/apache-tomcat-8.5.28/webapps/
    if test $(ps -ef|grep iFusionV4-1|grep -v grep |wc -l) -eq 1
    then
    echo "---------file exists, delete it first-----------"
    else
    echo "--------file not exist, go on---------"
    fi
    #放war包,重启tomcat解压war包#################################
    cd /software/iFusion_CI/
    mv $warfilename iFusionV4-1.war
    mv iFusionV4-1.war  /home/hadoop/apache-tomcat-8.5.28/webapps/
    if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
    then
    echo "----------no running, can't shutdown----------"
    else
    cd /home/hadoop/apache-tomcat-8.5.28/bin/
    ./shutdown.sh
    echo "------------tomcat shutdowning--------------"
    sleep 30
    if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
    then
    echo "------------no running ,can't kill------------"
    else
    ps -ef|grep tomcat|grep -v grep|grep -v tomcat2|awk '{print $2}'|xargs kill -9 #xargs是将前面的结果保存为后面的参数的意思
    echo "------------tomcat killing--------------"
    fi
    fi
    cd /home/hadoop/apache-tomcat-8.5.28/bin
    ./startup.sh 
    #停掉tomcat,替换配置文件######################################
    if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2 #lt是小于的意思,我的服务器里面有一个tomcat专门用来放jenkins
    then
    echo "----------no running, can't shutdown----------"
    else
    cd /home/hadoop/apache-tomcat-8.5.28/bin/
    ./shutdown.sh
    echo "------------tomcat shutdowning--------------"
    sleep 30
    if test $(ps -ef|grep tomcat|grep conf/logging.p|wc -l) -lt 2
    then
    echo "------------no running ,can't kill------------"
    else
    ps -ef|grep tomcat|grep -v grep|grep -v tomcat2|awk '{print $2}'|xargs kill -9
    echo "------------tomcat killing--------------"
    fi
    fi
    cd /home/hadoop/apache-tomcat-8.5.28/webapps/iFusionV4-1/WEB-INF/classes/config
    rm -f x-isinonet.properties
    cp /software/iFusion_CI/config_files/x-isinonet.properties /home/hadoop/apache-tomcat-8.5.28/webapps/iFusionV4-1/WEB-INF/classes/config
    #重启tomcat####################################################
    cd /home/hadoop/apache-tomcat-8.5.28/bin
    while [[ "$(ps -ef|grep tomcat|grep conf/logging.p|wc -l)" -lt 2 ]] #注意中括号与字母之间要有空格
    do
    ./startup.sh
    done

    邮件的shell命令我写在另一篇博客里了。

    至此,部署自动化、邮件发送自动化持续集成配置完毕(接口测试自动化就不在此描述了)。

    2018年11月28日记

    每天进步一点点,快乐生活多一点。
  • 相关阅读:
    jdk8 xp
    electron react
    electron install失败
    0511 Braft Editor和嵌套路由
    组播
    0427
    duilib自定义组件
    android 读写文件、列出根目录文件及新版本权限
    android Fragment使用RecyclerView
    Duilib 带xml的1
  • 原文地址:https://www.cnblogs.com/yiruliu/p/9968580.html
Copyright © 2011-2022 走看看