上一节完成了"当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)的更多相关文章

  1. 第三十九章 微服务CICD(1)- gitlab搭建与使用(docker版)

    一.下载docker镜像 前提:docker引擎已经安装好. docker pull gitlab/gitlab-ce gitlab是8.13.1版本. 二.启动应用 docker run -d -h ...

  2. 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s

    总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...

  3. 第四十三章 微服务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 ...

  4. Gradle 1.12用户指南翻译——第四十二章. Announce插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  5. “全栈2019”Java第四十二章:静态代码块与初始化顺序

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. 第四十一章 微服务CICD(3)- jenkins + gitlab + webhooks + publish-over-ssh(1)

    一.作用 使用webhooks来实现当git客户端push代码到gitlab后,jenkins会立即去gitlab拉取代码并构建. 二.步骤 1.安装插件 ruby_runtime(Hook插件依赖于 ...

  7. 四十二.部署MongoDB服务 、 MongoDB基本使用

    1. 部署MongoDB服务  192.168.4.50 创建服务工作目录 ]# mkdir /usr/local/mongodb ]# cd /usr/local/mongodb/ ]# mkdir ...

  8. 【WPF学习】第四十二章 透明

    WPF支持真正的透明效果.这意味着,如果在一个性质或元素上层叠另外几个形状或元素,并让所有这些形状和元素具有不同的透明度,就会看到所期望的效果.通过该特性能够创建透过上面的元素可以看到的的图像背景,这 ...

  9. springcloud(十四):搭建Zuul微服务网关

    springcloud(十四):搭建Zuul微服务网关 1. 2. 3. 4.

随机推荐

  1. Mvc4系列文章

    http://www.cnblogs.com/duanshuiliu/tag/MVC/

  2. pycharm基本设置

    python新建产生标题 File and Code Templates->Python Script pycharm代码行数 Editor->General->Appearance ...

  3. 黄聪:MySQL 按指定字段自定义列表排序

    问题描述 大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例, 下同): SELECT * FROM `MyTable` , , , ) ORDER BY `id` ASC ...

  4. 一张图教你搞定Mac App Store 应用安装包存储路径

    还在为找不到App Store 更新应用的安装文件发愁吗?是否有过多个人同时需要更新Xcode,都自己下载一次的痛苦经历? 大家都知道通过苹果服务器下载东西,确实难耐!AppStore 甚至都经常提示 ...

  5. java中&与&&的区别

    我想很多人在学习java的时候,或者面试时都会遇到 &和&& 然而,如果你没有真正的理解他们的意思,这会给你思路上面带来很大的麻烦 在这篇blog中,当你看完了以后,你会发现, ...

  6. Lambda表达式的演化,委托-匿名方法-Func-Lambda

    匿名方法 很多时候委托接收的方法是一次性的或者方法体是非常简单的... 例三: 我们可以写成: 有没有发现我们每次都要定义委托,很多时候签名可能是一样的.这样就没有必要定义重复的. 然后又过了很久很久 ...

  7. UNIX网络编程-基本API介绍(二)

    参考链接:http://www.cnblogs.com/riky/archive/2006/11/24/570713.aspx 1.getsockname和getpeername getsocknam ...

  8. IOS的UI总结

    一.UIView常见属性 1.frame  位置和尺寸(以父控件的左上角为原点(0,0)) 2.center 中点(以父控件的左上角为原点(0,0)) 3.bounds  位置和尺寸(以自己的左上角为 ...

  9. 使用 Fiddler2 进行接口测试的方法

    一 前言 部分业务需要进行接口测试,而接口测试的覆盖度稍有不全,可能就会造成包括启动崩溃在内的严重问题.目前本人所在的团队中业务大量使用了本地代码中直接 mock 数据进行测试,此种方法虽然可以测试到 ...

  10. c# webform网站图片另存代码

    好辛苦生成了二维码,然后要实现点击“保存图片”,弹出选择路径进行保存的效果. look: string qrcodeurl = ""; string username = &quo ...