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

深碍√TFBOYSˉ_ 2022-04-18 03:13 497阅读 0赞

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

1.环境准备

1.1 安装插件

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

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

1.2 环境配置

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

1

其中参数配置如下:

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

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

2.项目配置

这里大致分为四个部分

2.1 参数

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

2

3

4

2.2 Git

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

5

2.3 Build Environment

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

6

7

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

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

2.4 Build

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

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

如图

8

3.测试运行

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

  1. #!/bin/bash
  2. #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
  3. export BUILD_ID=dontKillMe
  4. jar_path=${1}
  5. jar_name=${2}
  6. spring_profile=${3}
  7. check_url=${4}
  8. project_name=${5}
  9. jdk_path=${6}
  10. if [ ! -n "${jar_path}" ] ;then
  11. echo "参数 1. jar_path 为空"
  12. exit 1
  13. fi
  14. if [ ! -n "${jar_name}" ] ;then
  15. echo "参数 2. jar_name 为空"
  16. exit 1
  17. fi
  18. if [ ! -n "${spring_profile}" ] ;then
  19. echo "参数 3. spring_profile 为空"
  20. exit 1
  21. fi
  22. if [ ! -n "${check_url}" ] ;then
  23. echo "参数 4. check_url 为空"
  24. exit 1
  25. fi
  26. if [ ! -n "${project_name}" ] ;then
  27. echo "参数 5. project_name 为空"
  28. exit 1
  29. fi
  30. if [ ! -n "${jdk_path}" ] ;then
  31. echo "参数 6. jdk_path 为空"
  32. exit 1
  33. fi
  34. #Jenkins中编译好的jar位置
  35. deploy_path=${jar_path}/${project_name}/
  36. #服务检查
  37. check_attempts=20
  38. check_timeout=6
  39. #进入工作目录,log会打在该目录下
  40. cd ${deploy_path}
  41. echo 'deploy_path' ${deploy_path}
  42. #获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
  43. pid=$(cat ${deploy_path}/pid)
  44. #杀掉以前可能启动的项目进程
  45. kill -9 ${pid}
  46. #启动jar,指定SpringBoot的profiles为test,后台启动
  47. nohup ${jdk_path} -jar -Xms256m -Xmx256m -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs -Dspring.profiles.active=${spring_profile} ${deploy_path}/${jar_name} >/dev/null &
  48. #将进程ID存入到pid文件中
  49. echo $! > ${deploy_path}/pid
  50. #服务启动检测
  51. online=false
  52. echo "检测服务启动状态"
  53. for (( i=1; i<=${check_attempts}; i++ ))
  54. do
  55. code=`curl -sL --connect-timeout 20 --max-time 30 -w "%{http_code}\\n" "${check_url}" -o /dev/null`
  56. echo "服务检测返回结果:$code"
  57. if [ "${code}" = "200" ]; then
  58. echo "已检测到服务:${check_url}"
  59. sleep 10
  60. online=true
  61. break
  62. else
  63. echo "未检测到服务,等待 ${check_timeout} 秒后重试"
  64. sleep ${check_timeout}
  65. fi
  66. done
  67. if $online; then
  68. echo "服务检查结束,服务启动正常"
  69. exit 0
  70. else
  71. echo "服务检查结束,服务启动失败"
  72. exit 1
  73. fi

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

9

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

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

11

4.总结

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

发表评论

表情:
评论列表 (有 0 条评论,497人围观)

还没有评论,来说两句吧...

相关阅读