本文是上一篇文章的后续,上一篇只是利用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使用就是一个熟悉了就感觉没那么难了,个人感觉这个工具就是需要慢慢熟悉,一开始是最难入手的。

Jenkins部署码云SpringBoot项目到远程服务器的更多相关文章

  1. Jenkins部署码云SpringBoot项目

    本文介绍jenkins如何从gitee上clone项目,然后使用maven打包并后台启动. 1.Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续 ...

  2. 搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子

    版本 springboot 2.1.5.RELEASE kafka 2.2 遇到的坑 用最新的springboot就要用最新的kafka版本! 当我启动云服务器上的zk后,再启动kafka后台日志也没 ...

  3. 2017 年度码云新增项目排行榜 TOP 50,为它们打“call”

    2017 年度码云新增项目排行榜 TOP 50 正式出炉 !2017 结束了,我们来关注一下这一年里码云上新增的最热门的开源项目吧.此榜单根据 2017 年在码云上新增开源项目的 Watch.Star ...

  4. Jenkins联动码云自动匹配分支进行构建流水线

    一.安装Generic Webhook Trigger插件 二.创建项目 创建项目之前先准备自己的项目,如果没有可以我fork的一个项目.地址是:https://gitee.com/jokerbai/ ...

  5. 2018 年度码云热门项目排行榜 TOP 10

    2016 年度码云热门项目排行榜 TOP 10 是通过开源项目2016年在码云上的 Watch.Star.Fork 数量来评定的榜单.码云平台发展至今,涌现了越来越多优秀的开源项目,越来越多的开源作者 ...

  6. 使用Git将项目托管到码云及从码云导入项目到本地

    前言 码云+Git+IntellJ IDEA 欢迎转载,请注明作者和出处哦☺ Git 的安装及使用的教程 ​​​​ 最好不要在官网下载,官网下载要vpn而且速度还很慢 . 推荐在 https://gi ...

  7. 码云Android项目构建注意事项(转载)

    1.ant项目 build.xml必须位于项目根目录. 2.maven项目 pom.xml必须位于项目根目录. 3.gradle项目 由于gradle的配置灵活,我们做了一些规范,并且增加了一下机制来 ...

  8. IntelliJ IDEA自动部署项目至远程服务器与传统部署项目至远程服务器的区别

    每次开发Java项目时,对于所有Java开发人员来说,最枯燥的不是修改代码,而是实时将自己的代码上传至远程服务器,进行测试或者部署,本人最初开发也是这样,通过使用Xshell 5,WinSCP等工具对 ...

  9. 最新JetBrainsPyCharm自动部署Python(Django,tornado等)项目至远程服务器

    每次开发Python项目时,对于所有Python开发人员来说,最枯燥的不是修改代码,而是实时将自己的代码上传至远程服务器,进行测试或者部署,本人最初开发也是这样,通过使用Xshell 5,WinSCP ...

随机推荐

  1. LeetCode(109):有序链表转换二叉搜索树

    Medium! 题目描述: 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: ...

  2. JavaScript 高级程序设计 第二版

    function outputNumbers(count) {     (function () {         for (var i =0;i < count; i++) {        ...

  3. stream to byte[], byte[] to srting

    byte[] myBinary = new byte[paramFile.Length]; paramFile.Read(myBinary, , (int)paramFile.Length); str ...

  4. Spring.Net 简单实例-01(IOC)

    1.话不多说看操作.新建"Windows窗体应用程序" 2:通过配置文件创建IOC容器 首先引入安装包 3:定义一个接口(更好的体现封装性,当然也可以直接使用类) 定义一个类,实现 ...

  5. How does exercise keep your brain young?

    Exercise may protect the brain from disease and dementia as we age, but the mechanisms behind its be ...

  6. Asp.Net MVC Ajax轮训解决Session失效时间

    这种方法不是太好,对服务器得压力大,由于系统是内部人员使用,业务有比较复杂,所以有些值得需要Session去保存,但是,Session有失效时间. 代码如下: $(function () { func ...

  7. 【C++ Primer 第13章】2. 拷贝控制和资源管理

    拷贝控制和资源管理 • 类的行为像一个值.意味着它应该有自己的状态,当我们拷贝一个像值得对象时,副本和原对象是完全独立的,改变副本不会对原对象有任何影响. • 行为像指针的类则共享状态.当我们拷贝一个 ...

  8. gitblit删除版本库

    Git客户端不提供删除远程仓库的方法,gitblit服务器网页也不支持删除版本仓库.若要强制删除,Windows下可以: 先在任务管理器中停止gitblit进程,然后将gitblit版本库文件夹中将版 ...

  9. js中类定义函数时用prototype与不用的区别

    转载自:https://blog.csdn.net/yexudengzhidao/article/details/72866047 先看例子 function ListCommon2(first,se ...

  10. Jmeter入门(压力测试)

    Jmeter介绍 Jmeter是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试). 而且用Jmeter 来测试 Restful API, 非常好用. ...