第四十二章 微服务CICD- jenkins + gitlab + webhooks + publish-over-ssh
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四十二章 微服务CICD- jenkins + gitlab + webhooks + publish-over-ssh相关的知识,希望对你有一定的参考价值。
上一节完成了"当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 "[email protected]"
此时,在~/.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
1 #!/bin/bash 2 export jar_name=$1 3 export port=$2 4 export java_home=/opt/jdk1.8.0_102 5 shutdown_second=5 6 echo "jar_name is ${jar_name}, port is ${port}" 7 8 pid="`${java_home}/bin/jps -l | grep ${jar_name} | awk ‘{print $1}‘`" 9 echo "pid is ${pid}" 10 11 if [ -n "${pid}" ] 12 then 13 kill -9 ${pid} 14 sleep ${shutdown_second} 15 fi 16 17 cd /data/jar/ 18 echo "start ${jar_name} process" 19 nohup ${java_home}/bin/java -jar -Dserver.port=${port} ${jar_name}>/data/log/${jar_name}.log & 20 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
以上是关于第四十二章 微服务CICD- jenkins + gitlab + webhooks + publish-over-ssh的主要内容,如果未能解决你的问题,请参考以下文章
第四十三章 微服务CICD- gitlab + jenkins + docker
第四十一章 微服务CICD- jenkins + gitlab + webhooks + publish-over-ssh