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

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

1.环境准备

1.1 安装插件

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

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

1.2 环境配置

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

其中参数配置以下:bash

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

都配置完成后能够点击下面Test Configuration进行测试,若是提示Success则证实配置成功。服务器

2.项目配置

这里大体分为四个部分curl

2.1 参数

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

2.2 Git

git没什么好说的,和以前同样,见下图。工具

2.3 Build Environment

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

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

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使用就是一个熟悉了就感受没那么难了,我的感受这个工具就是须要慢慢熟悉,一开始是最难入手的。

相关文章
相关标签/搜索