第四十二章 微服务CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)
上一节完成了"当git客户端push代码到gitlab后,jenkins会立即去gitlab拉取代码并构建"。
目的:本节完成jenkins自动构建之后,自动的将jar包部署到应用服务器并启动服务。
机器:
- jenkins服务器:10.211.55.4
- 应用服务器:10.211.55.3
一、jenkins安装publish-over-ssh
安装插件过程同前。
二、建立ssh信任(这也就是ssh的原理)
1、jenkins生成密钥对
在jenkins服务器执行
- ssh-keygen -t rsa -C "admin@example.com"
此时,在~/.ssh/目录下会生成id_rsa(私钥)和id_rsa.pub(公钥),
2、将公钥粘贴到应用服务器
将id_rsa.pub中的内容复制粘贴到应用服务器的~/.ssh/authorized_keys,
若没有此文件自己创建。
3、将私钥贴到jenkins服务器的ssh server处
"系统管理"->"系统设置",



说明:
- Passphrase:在执行密钥对生成命令的时候我们设定的。
- Key:jenkins生成的私钥id_rsa内容。
- SSH Server:
- Name:随意
- Hostname:应用服务器ip
- Username:随意
- Remote Directory:jenkins向应用服务器上传的文件的上传目录。
配置完成之后,点击"Test Configuration",显示"success",则连接成功!!!
三、配置服务
在服务"mytest-service1"的"配置"中点击"增加构建后操作",

说明:
- source files:上传文件(这里是jar包)的所在位置,其相对的路径是~/.jenkins/workspace/mytest-service1
- remove prefix:删除掉source files的前缀target,否则会在应用服务器创建target目录,即:jar包存放在/data/jar/target中
- Exec command:上传文件后,在应用服务器上执行的远程命令
- 进入脚本service_start.sh所在的位置
- 执行service_start.sh脚本,并传入参数mytest-service1-1.0-SNAPSHOT.jar和8088
四、应用服务器
创建脚本/opt/script/service_start.sh
#!/bin/bash
export jar_name=$
export port=$
export java_home=/opt/jdk1..0_102
shutdown_second=
echo "jar_name is ${jar_name}, port is ${port}"
pid="`${java_home}/bin/jps -l | grep ${jar_name} | awk '{print $1}'`"
echo "pid is ${pid}"
if [ -n "${pid}" ]
then
${pid}
sleep ${shutdown_second}
fi
cd /data/jar/
echo "start ${jar_name} process"
nohup ${java_home}/bin/java -jar -Dserver.port=${port} ${jar_name}>/data/log/${jar_name}.log &
echo "end ${jar_name} process"
说明:
- jar_name为命令行传入的第一个参数,即mytest-service1-1.0-SNAPSHOT.jar
- 注意:需要export
- port为命令行传入的第二个参数,即8088
- 指定java_home
- 注意:直接使用${JAVA_HOME},在应用服务器本机是可以的,但是通过jenkins远程执行就获取不到了
- 定义shutdown_second为5s
- 使用jps获取所有java进程,使用grep获取mytest-service1-1.0-SNAPSHOT.jar的那条进程,使用awk获取进程信息的第一个参数(即进程号pid)
- 若是在应用服务器本机,只要配置了JAVA_HOME,可以直接使用jps,但是通过jenkins远程执行就要写全了,包括后边的java命令。
- 如果pid不为空,kill该进程,睡眠5s
- 进入jar宝所在位置,执行启动命令,并且将日志输出到/data/log/mytest-service1-1.0-SNAPSHOT.jar.log中
- 若是在在应用服务器本机,可以直接nohup执行,若是通过jenkins远程执行,则需要将日志输出到一个应用服务器的一个文件中,否则jenkins的构建过程将一直等到超时失败为止。(还有/data/log/目录要提前建好,或者在脚本中建好)
五、测试
本地开发机,修改代码,
- git add --all
- git commit -m"test ci"
- git push origin HEAD:dev
查看jenkins输出console log,查看应用服务器jps java进程,在浏览器访问http://10.211.55.3:8088/test/hello
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { color: #c33720 }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
第四十二章 微服务CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)的更多相关文章
- 第三十九章 微服务CICD(1)- gitlab搭建与使用(docker版)
一.下载docker镜像 前提:docker引擎已经安装好. docker pull gitlab/gitlab-ce gitlab是8.13.1版本. 二.启动应用 docker run -d -h ...
- 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...
- 第四十三章 微服务CICD(5)- gitlab + jenkins + docker + dockerregsitry
一.总体流程 部署: 开发机(mac) ip:11.11.11.11 docker:1.12.1 部署机(centos7) ip:10.211.55.4 docker:1.12.3 生产机(cento ...
- Gradle 1.12用户指南翻译——第四十二章. Announce插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- “全栈2019”Java第四十二章:静态代码块与初始化顺序
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 第四十一章 微服务CICD(3)- jenkins + gitlab + webhooks + publish-over-ssh(1)
一.作用 使用webhooks来实现当git客户端push代码到gitlab后,jenkins会立即去gitlab拉取代码并构建. 二.步骤 1.安装插件 ruby_runtime(Hook插件依赖于 ...
- 四十二.部署MongoDB服务 、 MongoDB基本使用
1. 部署MongoDB服务 192.168.4.50 创建服务工作目录 ]# mkdir /usr/local/mongodb ]# cd /usr/local/mongodb/ ]# mkdir ...
- 【WPF学习】第四十二章 透明
WPF支持真正的透明效果.这意味着,如果在一个性质或元素上层叠另外几个形状或元素,并让所有这些形状和元素具有不同的透明度,就会看到所期望的效果.通过该特性能够创建透过上面的元素可以看到的的图像背景,这 ...
- springcloud(十四):搭建Zuul微服务网关
springcloud(十四):搭建Zuul微服务网关 1. 2. 3. 4.
随机推荐
- 移动POS机
1.怎么识别手刷机所属公司是否是二清公司,甚至是多清 去银行,手机银行,网上银行查询该笔款是哪里汇出的,如果是银行或合法支付公司汇出,一般为一清机,如果是个人或无支付牌照的支付公司,一般为二清机: 已 ...
- 你所不了解的setTimeout
看到了一篇不错的文章<你会用setTimeout吗 >,转载过来的,改了个名字,一下子感觉搞大上了,嘎嘎. 加了几个关于 setTimeout 和setInterval的小知识: 关于se ...
- 使用Apache Commons Configuration读取配置信息
在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中,我将会给你介绍一个在Java中读取配置文件的框架——Apache Commons Configuration framework. 你会了 ...
- SQL总结(三)其他查询
SQL总结(三)其他查询 其他常用的SQL,在这里集合. 1.SELECT INTO 从一个表中选取数据,然后把数据插入另一个表中.常用于创建表的备份或者用于对记录进行存档. 语法: SELECT c ...
- IOS开发-第三方SDWebImage下载网络图片的使用
从网络上请求图片时,没有使用第三方的话,下载会很慢,而且堵塞线程,还要自己处理多线程问题,效果还非常不明显,使用了SDWebImage这个第三方类库之后,下载图片就变的容易多了. SDWebImage ...
- JSONP理解和使用
一.代码使用: $.ajax({ async:false, url: http://跨域的dns, type: "GET", dataType: 'jsonp'}); 二.理解: ...
- 利用 Excel 公式进行数据整理
一个考勤机里导出来的数据明细: A3公式:=IF(MOD(ROW(Sheet1!U5),2)=1,Sheet1!U5,INDIRECT("Sheet1!U"&ROW(She ...
- JAVA_Java中关于supper和this的理解
2015-04-04 Created By BaoXinjian
- Spring Boot CLI安装
Spring Boot是一个命令行工具,用于使用Spring进行快速原型搭建.它允许你运行Groovy脚本,这意味着你可以使用类Java的语法,并且没有那么多的模板代码. 你没有必要为了使用Sprin ...
- 【javascript基础】5、创建对象
前言 今天从家里回到了学校,在家呆了十天,胖了几斤的重量,又折腾回学校了,春节回家真是艰辛的路途.随便扯扯我的往返行程:为了省钱我没有选择直飞到长春往返都是到北京转的,这样我和女朋友可以节省4000块 ...