DarkTime
  • README
  • SpringBoot
    • spring boot 运维
    • Spring Boot 部署war包
    • springboot搭建
    • spring boot 读取配置文件
    • 简单总结
    • spring配置文件
    • spring boot Configuration
    • spring boot 配置文件
    • spring boot 配置mybatis
  • MacAwesome
    • markdown使用
    • MAC APP Awesome
    • [markdown使用](/MacAwesome/SUMMARY.md)
    • chrome
    • intellij idea
    • MacAwesome
    • VS Code 的使用
    • MAC Shell命令
  • database
    • druid使用
  • 框架
    • 项目拆析
    • 各种框架和工具
  • docker
    • kubernetes
    • docker
    • docker 常用镜像
  • 效率工具
    • 解决dns污染导致域名解析失败
    • sonarqube 相关配置
    • Iterm2 使用
    • gitbook
    • github awesome github资源推荐
    • playground 在线试用平台汇总
    • linux中的office
    • linux screen 工具
    • 简单Mock服务(moco)
    • npm
    • Visual Studio Code 的使用
    • 配置开发环境
    • homebrew的使用
    • 汇总
  • tomcat
    • tomcat目录规范
  • code_snippets
  • 专题
    • RESTful API
    • serveless服务
    • 搭建私有云主机 折腾记
    • 开发中的各种疑难杂症问题
    • spring 最佳实践
    • LLM 大语言模型
    • notelive
      • 文章框架
      • notelive vue版本开发
      • notelive 开发 札记
    • webrtc技术分析
    • 反向代理
    • spring-cloud
      • spring boot admin 监控服务
      • Spring Cloud 整理汇总
  • python
    • python 学习
    • Python 修饰器的一些小细节
  • 云主机
    • aliyun 主机的种种
  • maven
    • maven使用
    • maven项目增加编译版本号 buildnumber-maven-plugin
    • 仓库
  • java
    • java 开发常用工具类
    • java
    • apache commons pool 对象连接池
  • 大数据
    • kafka
    • gobblin
    • sqoop 简介及使用
    • hbase
    • gobblin
    • sqoop源码解析
    • hadoop map reduce
    • 大数据 学习札记
  • 脚本
    • python
      • 批量请求url 解析json数据
    • js
      • sheetjs-js读取excel
    • shell
      • 自动生成bitbook的summary文件
      • linux/mac 实用脚本
      • 自动创建tomcat项目脚本
      • 批量处理文件内容脚本
  • nginx
    • nginx
    • ngix 文件浏览器 文件服务器
  • linux
    • 群晖nas札记
    • ftp
    • linux 运维
    • 常用命令
    • linux
    • mysqldump脚本
    • 代理
    • 简易灰度部署脚本 不使用jenkins的纯shell方式
    • shell脚本
    • 附加文档
  • mysql
    • sql
  • 游戏开发
    • Unity 2020 学习笔记
  • 学习笔记
    • centos常用环境安装
    • gradle 学习
    • 建站经历
    • python
      • 爬虫教程
    • 如何解决百度爬虫无法爬取搭建在Github上的个人博客的问题? - 知乎
    • baas
      • 在本地部署Parse Server
    • mysql学习标记
    • java code snippets
    • 非Spring Boot Web项目 注册节点到Eureka Server并提供服务
    • kotlin
      • Kotlin 学习札记
    • spring cloud
    • vim配置
    • 前端
      • 开发PWA应用
  • jenkins
    • jenkins配置备份
    • gitlab触发Jenkins 自动构建
    • 安装与使用
  • npm
    • npm 使用
  • git
    • ignore
    • git使用总结
    • git配置多个远程仓库
  • 前端
    • swig
    • 解决跨域请求问题
    • angularjs 学习
    • scriptbot的前端开发经验总结
    • 各种资源
    • 一些有用的js代码
Powered by GitBook
On this page
  • 简易灰度部署脚本 不使用jenkins的纯shell方式
  • 编译项目并启动服务
  • 引用到的脚本
  • !bin/bash
  • set -x
  • !/usr/bin/env bash

Was this helpful?

  1. linux

简易灰度部署脚本 不使用jenkins的纯shell方式

简易灰度部署脚本 不使用jenkins的纯shell方式

tag: 项目部署 灰度部署 shell部署项目

部署环境需要安装maven和git

编译项目并启动服务

#!/bin/sh
srcPath=/data/git_repository/springboot_app #源码地址
deployPath=/data/apps/springboot_app #部署路径
jarName=springboot_app-0.0.1-SNAPSHOT.jar

# 编译依赖的模块并install
cd /data/git_repository/common_project
git pull
mvn clean install -Dmaven.test.skip=true
echo "common_project 代码构建完成!"

cd $srcPath
git pull
mvn clean package -Dmaven.test.skip=true
echo "app代码构建完成"

if [ ! -f "/data/git_repository/springboot_app/web/target/springboot_app-0.0.1-SNAPSHOT.jar" ];then
echo "打包失败,文件不存在!"
exit
fi

cd $deployPath

#当前时间 精确到秒  
currentTimeStamp=`date '+%Y%m%d-%H%M%S'`

mv lib/$jarName lib/$jarName.$currentTimeStamp
echo "jar备份完成"

cp $srcPath/manager-web/target/$jarName lib/
echo "jar启动完成"

./bin/springboot_app.sh restart

# tail -300f logs/start.log

引用到的脚本

判断服务状态 ping.sh curl请求的的方式判断服务是否已经启动完成

```bash ping.sh

!bin/bash

set -x

server_url=$1

while [[ true ]] do echo waiting server $server_url ... urlstatus=$(curl -s -m 5 -IL $server_url |grep HTTP) if [ "${urlstatus}" != "" ];then echo "${server_url} is ONLINE" break fi sleep 3 done

**主启动脚本**
springboot_app.sh  
主启动服务脚本

```bash springboot_app.sh
#!/usr/bin/env bash
set -e
export set LC_ALL='en_US.UTF-8'
PRG="$0"
version="0.0.1-SNAPSHOT"
moduleName="springboot_app"
BIN_HOME=`cd $(dirname "$PRG"); pwd`
APP_HOME=`cd ${BIN_HOME}/..;pwd`
echo "APP_HOME: $APP_HOME"
logs=$APP_HOME/logs
jar_path="${APP_HOME}/lib"
jar_name="${moduleName}-$version.jar"
startlog="${logs}/start.log"
server_port="9081"
slave_port="9181"
slave_sh=${BIN_HOME}/springboot_app-slave.sh
ping_sh=${BIN_HOME}/ping.sh

get_pid(){
pid=`ps -ef | grep -v grep | grep "${jar_path}/${jar_name}" |  awk '{print $2}'`
echo $pid
}

process_is_running(){
    pid=`get_pid`
    if [ -z $pid ]
    then
        echo 1
    else
        echo 0
    fi
}

start() {

    pid=`get_pid`
    if test `process_is_running` -eq 0
    then
        echo "WARN:process is running,pid is $pid"
        exit 1
    else
        echo "Starting server: "
        JVM_OPTS="-server -Xms4G -Xmx4G -XX:MaxMetaspaceSize=256M -XX:MetaspaceSize=256M -Xloggc:${logs}/gc.log -XX:-PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70  -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:+HeapDumpOnOutOfMemoryError"
        echo "java ${JVM_OPTS} -Dspring.config.location=classpath:application.properties,classpath:application.yml,file:${APP_HOME}/conf/application.properties -jar ${jar_path}/${jar_name}"
        setsid su hdfs -c "java ${JVM_OPTS} -Dapp.log.home=${logs} -Dspring.config.location=classpath:application.properties,classpath:application.yml,file:${APP_HOME}/conf/application.properties,file:${APP_HOME}/conf/application.yml -jar ${jar_path}/${jar_name} > ${startlog} 2>&1  &"
        sleep 2s
        pid=`get_pid`
        if test `process_is_running` -eq 0
        then
            echo "start success! pid is $pid"
        else
            echo "start fail."
        fi
    fi
        #等待主服务启动完成
        sh $ping_sh http://localhost:$server_port
        #为了避免日志打印到多处,停止slave服务,开发环境不需要做负载均衡
        echo stop slave
        sh $slave_sh stop
}

stop() {
        #停止服务的时候先启动slave_server
        echo start slave_server
        sh $slave_sh restart
        #等待slave服务启动完成
        sh $ping_sh http://localhost:$slave_port

    pid=`get_pid`
    if test `process_is_running` -eq 0
    then
        echo "stopping..."
        pid=`get_pid`
        kill -9 $pid
        if test `process_is_running` -eq 0
        then
            echo "stop fail"
        else
            echo "stop success"
        fi
    else
        echo "WARN:process is not exist."
    fi
}

restart() {
    stop
    start
}

rh_status() {
    pid=`get_pid`
    if test `process_is_running` -eq 0
    then
        echo "process is running,pid is $pid"
    else
        echo "process is not running"
    fi
    RETVAL=$?
    return $RETVAL
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        restart
    ;;
    status)
        rh_status
    ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 1
esac

备服务启动脚本 springboot_app-slave.sh 备服务启动服务脚本

```bash springboot_app-slave.sh

!/usr/bin/env bash

export set LC_ALL='en_US.UTF-8' PRG="$0" version="0.0.1-SNAPSHOT" moduleName="springboot_app" BIN_HOME=cd $(dirname "$PRG"); pwd APP_HOME=cd ${BIN_HOME}/..;pwd echo "APP_HOME: $APP_HOME" logs=$APP_HOME/logs_slave jar_path="${APP_HOME}/lib" jar_name="${moduleName}-$version-slave.jar" s_jar_name="${moduleName}-$version.jar" startlog="${logs}/start.log" server_port="9181" get_pid(){ pid=ps -ef | grep -v grep | grep "${jar_path}/${jar_name}" | awk '{print $2}' echo $pid }

process_is_running(){ pid=get_pid if [ -z $pid ] then echo 1 else echo 0 fi }

start() { cp ${jar_path}/${s_jar_name} ${jar_path}/${jar_name} pid=get_pid if test process_is_running -eq 0 then echo "WARN:process is running,pid is $pid" exit 1 else echo "Starting server: " JVM_OPTS="-server -Xms4G -Xmx4G -XX:MaxMetaspaceSize=256M -XX:MetaspaceSize=256M -Xloggc:${logs}/gc.log -XX:-PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:+HeapDumpOnOutOfMemoryError" echo "java ${JVM_OPTS} -Dspring.config.location=classpath:application.properties,classpath:application.yml,file:${APP_HOME}/conf/application.properties -jar ${jar_path}/${jar_name}" setsid su hdfs -c "java ${JVM_OPTS} -Dapp.log.home=${logs} -Dspring.config.location=classpath:application.properties,classpath:application.yml,file:${APP_HOME}/conf/application.properties,file:${APP_HOME}/conf/application.yml -jar ${jar_path}/${jar_name} --server.port=${server_port} > ${startlog} 2>&1 &" sleep 2s pid=get_pid if test process_is_running -eq 0 then echo "start success! pid is $pid" else echo "start fail." fi fi }

stop() { pid=get_pid if test process_is_running -eq 0 then echo "stopping..." pid=get_pid kill -9 $pid if test process_is_running -eq 0 then echo "stop fail" else echo "stop success" fi else echo "WARN:process is not exist." fi }

restart() { stop start }

rh_status() { pid=get_pid if test process_is_running -eq 0 then echo "process is running,pid is $pid" else echo "process is not running" fi RETVAL=$? return $RETVAL }

case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) rh_status ;; *) echo $"Usage: $0 {start|stop|status|restart}" exit 1 esac ```

Previous代理Nextshell脚本

Last updated 6 years ago

Was this helpful?