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日记

    每天进步一点点,快乐生活多一点。
  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/yiruliu/p/9968580.html
Copyright © 2011-2022 走看看