zoukankan      html  css  js  c++  java
  • Jenkins单节点自动化部署

    Jenkins可以满足实现程序自动化部署。并且可定制化脚本执行以及跟着发布情况

    其中具体的Jenkins构建可以根据指引:

    https://www.cnblogs.com/YatHo/p/6647561.html?utm_source=itdadao&utm_medium=referral

    我对Jenkins实现了优化。

    采用两步走,build code,然后在进行构建code。这样可以避免在clone 代码的时候,发现仍然有坑,获取需要跟其他的开发协同合并分支才能进行发布,但是呢,前者已经build了,后者还没执行构建,那么就可以实现两步走来防范如上情况出现。

    一:build code

    脚本如下:

    #!/bin/bash

    # 先判断文件是否存在,如果存在,则备份

    echo "复制备份....${WORKSPACE}/${BUILD_PATH}/target/"

    IFS='- ' read -r -a array <<< "{BUILD_NAME}"

    file="/home/xxxx/jenkins/jekins-web/${BUILD_NAME}.jar"

    newfile="${WORKSPACE}/${BUILD_PATH}/target/${BUILD_NAME}.jar"

    if [ ! -f "$newfile" ]

    then

    echo "${BUILD_NAME} jar没有打包成功!"

    exit 0

    fi

    if [ -f "$file" ]

    then

    mkdir -p /home/xxxx/jenkins/jekins-web/bak/

    mv $file /home/xxxx/jenkins/jekins-web/bak/${BUILD_NAME}.jar.`date +%Y%m%d%H%M%S`

    fi

    mv $newfile /home/xxxx/jenkins/jekins-web/${BUILD_NAME}.jar

    该脚本支持单个项目部署以及maven聚合模块部署。

    注:启动如果没加参数,那么就会出现构建的时候将Jenkins部署的服务都自动给kill了。。该问题折腾了我一个下午。。

    1.启动 Jenkins 的时候加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
    2.在后台进程前加上 BUILD_ID=dontKillMe,也就是 BUILD_ID=dontKillMe nohup npm start >/var/app/nohup.out 2>&1 &
     
    ================-----------------------============
    jar执行脚本

    #将应用停止
    #stop.sh
    #!/bin/bash
    echo "停止应用服务...$1"
    pid=`ps -ef | grep $1.jar | grep -v grep |awk '{print $2}'`
    echo "ps -ef | grep $1.jar | grep -v grep "
    if [ -n "$pid" ]
    then
    echo "$pid is kill"
    kill $pid
    sleep 2
    fi


    #新建日志目录
    mkdir -p /home/xxxx/logs/$1
    #startup.sh 启动项目
    #!/bin/sh
    echo "授予当前用户权限"
    chmod 777 /home/xxxx/jenkins/jekins-web/$1.jar
    echo "执行....."
    BUILD_ID=dontKillMe nohup nice /home/xxxx/java/jdk1.8/bin/java -Xms128m -Xmx128m -XX:MaxPermSize=128m -Dapp.id=$1 -Denv=dev -Ddev_meta=http://127.0.0.1:8080 -jar /home/xxxx/jenkins/jekins-web/$1.jar > /home/xxxx/logs/$1/application.log 2>&1 &

    补充:

    启动脚本,切记,在微服务中需要安全结束进程,如果直接强制kill,那么服务发现将会收不到对应的通知该服务的消息,服务发现会误以为该服务的实例仍然存在,因此需要安全杀进程

    #将应用停止
    #stop.sh
    #!/bin/bash
    #echo "停止应用服务...$1"

    pid=`ps -ef | grep $1.jar | grep -v grep |awk '{print $2}'`

    #定义整型变量
    a=1
    while [ $pid -gt 1 ]
    do
    echo "开始,第$a次"
    sleep 3
    pid=`ps -ef | grep $1.jar | grep -v grep |awk '{print $2}'`

    let a++
    if [ $a -eq 20]
    #直接强制kill
    then
    kill -9 $pid;
    echo "第$a次直接强制kill";
    fi;
    echo "第$a次=======kill:$pid==========";
    kill $pid;

    done
    echo "yes!执行完毕"


    #新建日志目录
    mkdir -p /home/visa_equity/logs/$1
    #startup.sh 启动项目
    #!/bin/sh
    echo "授予当前用户权限"
    chmod 777 /home/visa_equity/jenkins/jekins-web/$1.jar
    echo "执行....."
    BUILD_ID=dontKillMe nohup nice /home/visa_equity/java/jdk1.8/bin/java -Xms128m -Xmx128m -XX:MaxPermSize=128m -Dapp.id=$1 -Denv=dev -Ddev_meta=http://172.16.2.152:8080 -jar /home/visa_equity/jenkins/jekins-web/$1.jar > /home/visa_equity/logs/$1/application.log 2>&1 &

  • 相关阅读:
    093孤荷凌寒自学第179天区块链093天Dapp048
    092孤荷凌寒自学第178天区块链092Dapp047
    091孤荷凌寒自学第177天区块链091天Dapp046
    090孤荷凌寒自学第180天区块链090天Dapp045
    089孤荷凌寒自学第175天区块链089天Dapp044
    088孤荷凌寒自学第174天区块链088天Dapp043
    087孤荷凌寒自学第173天区块链087天Dapp042
    孤荷凌寒自学第172天区块链086天Dapp041
    孤荷凌寒自学第171天区块链085天Dapp040
    iOS开发——高级篇——内存分析,Instruments
  • 原文地址:https://www.cnblogs.com/jimw/p/9503806.html
Copyright © 2011-2022 走看看