• Jenkins部署码云SpringBoot项目到远程服务器


    本文是上一篇文章的后续,上一篇只是利用Jenkins部署项目到本地,并启动,本文是将项目部署到远程服务器并执行。

    1.环境准备

    1.1 安装插件

    上一篇文章已经介绍了需要安装的应用及插件,这一篇还需要2个插件,分别是如下插件:

    • Git Parameter Plug-In :这个插件用于获取git上信息,如分支和标签
    • Publish Over SSH :这个插件用于将本地文件发送到远程服务器

    1.2 环境配置

    这里需要在 系统管理->系统设置->Publish over SSH配置远程部署的服务器,如图:

    其中参数配置如下:

    • Passphrase :远程服务器密码
    • Name :这个就是给远程连接起个名
    • Hostname :远程服务器地址
    • Username :远程服务器用户名
    • Remote Directory :上传文件路径

    都配置完成后可以点击下面Test Configuration进行测试,如果提示Success则证明配置成功。

    2.项目配置

    这里大致分为四个部分

    2.1 参数

    首先是参数,基本上和上一篇差不多,新增了几个,有一个和之前的不一样,使用的Git Parameter,这里选择的分支(branch),如下图:

    2.2 Git

    git没什么好说的,和之前一样,见下图。

    2.3 Build Environment

    这里配置了要传到对应服务器的东西,以及需要使用的脚本,见下图。

    Exec command脚本代码如下,这里也没什么好说的,进入对应目录,将脚本赋予权限,然后执行。

    cd ${jar_path}/${project_name}/;
    chmod 777 start_${project_name}.sh;
    ./start_${project_name}.sh ${jar_path} ${jar_name} ${spring_profile} ${check_url} ${project_name} ${jdk_path}
    

    2.4 Build

    这里就是将项目打包,然后把服务器上shell脚本复制到打包后文件夹,代码如下:

    mvn clean install -Dmaven.test.skip=true;
    cp /usr/local/shell/start_jar.sh start_${project_name}.sh;
    

    如图

    3.测试运行

    运行前,展示一下远程上传的脚本,脚本内容并非本人自己写的,借鉴了其他组的脚本:

    #!/bin/bash
    
    #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
    export BUILD_ID=dontKillMe
    
    jar_path=${1}
    jar_name=${2}
    spring_profile=${3}
    check_url=${4}
    project_name=${5}
    jdk_path=${6}
    
    if  [ ! -n "${jar_path}" ] ;then
        echo "参数 1. jar_path 为空"
        exit 1
    fi
    if  [ ! -n "${jar_name}" ] ;then
        echo "参数 2. jar_name 为空"
        exit 1
    fi
    
    if  [ ! -n "${spring_profile}" ] ;then
        echo "参数 3. spring_profile 为空"
        exit 1
    fi
    if  [ ! -n "${check_url}" ] ;then
        echo "参数 4. check_url 为空"
        exit 1
    fi
    if  [ ! -n "${project_name}" ] ;then
        echo "参数 5. project_name 为空"
        exit 1
    fi
    if  [ ! -n "${jdk_path}" ] ;then
        echo "参数 6. jdk_path 为空"
        exit 1
    fi
    
    #Jenkins中编译好的jar位置
    deploy_path=${jar_path}/${project_name}/
    
    #服务检查
    check_attempts=20
    check_timeout=6
    
    #进入工作目录,log会打在该目录下
    cd ${deploy_path}
    
    echo 'deploy_path' ${deploy_path}
    #获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
    pid=$(cat ${deploy_path}/pid)
    
    #杀掉以前可能启动的项目进程
    kill -9 ${pid}
    
    #启动jar,指定SpringBoot的profiles为test,后台启动
    nohup ${jdk_path} -jar -Xms256m -Xmx256m -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs -Dspring.profiles.active=${spring_profile} ${deploy_path}/${jar_name} >/dev/null &
    
    #将进程ID存入到pid文件中
    echo $! > ${deploy_path}/pid
    
    #服务启动检测
    online=false
    echo "检测服务启动状态"
    for (( i=1; i<=${check_attempts}; i++ ))
    do
      code=`curl -sL --connect-timeout 20 --max-time 30 -w "%{http_code}\n" "${check_url}" -o /dev/null`
      echo "服务检测返回结果:$code"
      if [ "${code}" = "200" ]; then
        echo "已检测到服务:${check_url}"
        sleep 10
        online=true
        break
      else
        echo "未检测到服务,等待 ${check_timeout} 秒后重试"
        sleep ${check_timeout}
      fi
    done
    if $online; then
      echo "服务检查结束,服务启动正常"
      exit 0
    else
      echo "服务检查结束,服务启动失败"
      exit 1
    fi
    
    

    在jenkins部署项目,如下图,对应参数,分支只有一个master。这里的测试地址我选择的是项目首页,如下:

    点击Build按钮后,等待处理即可,可能由于两个服务器间传输文件比较慢的原因相对时间不是很快。执行结束后见下图:


    然后访问http://47.98.109.195:8888/可以看到下图:

    4.总结

    总体感觉jenkins使用就是一个熟悉了就感觉没那么难了,个人感觉这个工具就是需要慢慢熟悉,一开始是最难入手的。

  • 相关阅读:
    情感日记:离校,漂流他乡
    汉化破解:{smartassembly}使用指南
    金融市场:Open.Yale.course:Financial.Markets.07.Chi_Eng
    【转载】[解决系统服务运行应用程序的权限问题]使用WTSGetActiveConsoleSessionId()的VISTA服务与桌面交互
    【转载】关于sqlserver自增长列的问题
    【转载】如何给IIS添加能访问的文件类型
    【原创】使用反射之后,强制类型转化不成功的问题在哪?
    【转载】网站开发人员应该知道的61件事
    【索引】转载关于DSL、代码生成器使用、依赖注入方式
    【原】使用SoundPlayer播放wav文件时产生杂音如何处理
  • 原文地址:https://www.cnblogs.com/dalaoyang/p/9924613.html
Copyright © 2020-2023  润新知