zoukankan      html  css  js  c++  java
  • jenkins系列---【jenkins+gitlab+springBoot实现CI和CD】

    1.安装JDK8

    2.安装jenkins

    3.安装jenkins插件

    4.安装gitlab

    5.安装git(centos7系统一般自带,用"git --version"验证)

    6.安装maven

    7.rsa生成公钥私钥

    8.在gitlab中添加公钥

    9.在jenkins中全局添加私钥、JDK、gitlab项目地址和登录账号密码、git、maven

    10.创建jenkins构建任务并配置构建脚本

    #修改成自己项目的
    
    #jar包名
    JAR_NAME=springboot_validator-1.0.0-SNAPSHOT.jar
    
    #jenkins拉取之后存放代码的目录
    WORK_HOME=/var/lib/jenkins/workspace/test_validator
    
    #项目要部署的位置
    APP_HOME=/app/backend
    
    #启动项目的脚本名称,一定要和启动项目的脚本名字一致
    SHELL_NAME=app.sh
    
    #首先关闭所有的服务,这里不要用sh执行脚本,会查出多个PID,导致无法关闭进程
    cd $APP_HOME 
    ./$SHELL_NAME stop $APP_HOME/$JAR_NAME
    
    #进入jenkins的工作空间 对应的项目地址
    cd $WORK_HOME
    
    # clean install 清除之前的包,并将所有模块 打包
    mvn clean install package -Dmaven.test.skip=true
    
    # 进入每个需要部署服务的target目录,将jar包移动到指定目录,-f强制覆盖
    cd target/
    mv -f $JAR_NAME $APP_HOME/$JAR_NAME
    
    #启动每个服务的启动脚本
    cd $APP_HOME 
    ./$SHELL_NAME start $APP_HOME/$JAR_NAME

    11.服务启动脚本,app.sh(这个名字要和上面脚本中的SHELL_NAME一模一样),app.sh同级目录下手动创建一个logs文件夹。

    #spring boot Jar包目录
    APP_NAME=$2
    PID=$(ps -ef | grep $APP_NAME| grep -v grep | awk '{print $2}')
    #使用说明,用来提示输入参数
    usage() {
        echo "Usage: sh start.sh [start|stop|restart|status] [APP_NAME]"
        exit 1
    }
     
    #检查程序是否在运行
    is_exist(){
      #pid=$(ps -ef | grep $APP_NAME| grep -v grep | awk '{print $2}')
      #如果不存在返回1,存在返回0     
      if [ -z "${PID}" ]; then
        return 1
      else
        return 0
      fi
    }
     
    #启动方法
    start(){
      is_exist
      if [ $? -eq 0 ]; then
        echo "${APP_NAME} is already running. pid=${PID}"
      else
            #这个dontKillMe 是一定要加的,不然jenkins会杀死这个进程,导致服务退出
            BUILD_ID=dontKillMe
            #将日志输出到out,可以自己命名,下面会输出“start_2021_10_14_00:10:1634142002.out”样式的文件
            current_date=`date -d "-1 day" "+%Y_%m_%d_%H:%m:%s"`
        nohup java -jar ${APP_NAME}  >logs/start_${current_date}.out 2>&1 &
      fi
    }
     
    #停止方法
    stop(){
      is_exist
      if [ $? -eq "0" ]; then
       echo "应用${APP_NAME}停止服务,PID为:${PID}!"
        kill -9 ${PID}
      else
        echo "${APP_NAME} is not running"
      fi  
    }
     
    #输出运行状态
    status(){
      is_exist
      if [ $? -eq "0" ]; then
        echo "${APP_NAME} is running. Pid is ${PID}"
      else
        echo "${APP_NAME} is NOT running."
      fi
    }
     
    #重启
    restart(){
      stop
      sleep 5
      start
    }
     
    #根据输入参数,选择执行对应方法,不输入则执行使用说明
    case "$1" in
      "start")
        start
        ;;
      "stop")
        stop
        ;;
      "status")
        status
        ;;
      "restart")
        restart
        ;;
      *)
        usage
        ;;
    esac
    愿你走出半生,归来仍是少年!
  • 相关阅读:
    golang删除数组某个元素
    golang用通道实现信号量,控制并发个数
    什么是ScaleIO中的forwards rebuild和backwards rebuild?
    SQL Server中的database checkpoint
    如何将thick provision lazy zeroed的VMDK文件转换为thick provision eager zeroed?
    LoadTestAgentResultsLateException in VS2010
    SQL Server Instance无法启动了, 因为TempDB所在的分区没有了, 怎么办?
    VMware vCenter中, 如何辩认虚机上Raw Device Mapping过了的一块物理磁盘?
    SQL Server AlwaysOn Setup Step-By-Step Guide
    TPC-E在populate测试Database时需要注意的一些事项
  • 原文地址:https://www.cnblogs.com/hujunwei/p/15409286.html
Copyright © 2011-2022 走看看