Jenkins自动部署spring boot

背景介绍

本公司属于微小型企业,初期业务量不高,所有程序都写在一个maven项目里面,不过是多模块开发。

分了login模块,service模块,cms模块。

我们初期部署的是两台服务器,使用nginx把http请求分发到两台服务器上,每次需要发布新功能的时候,都是手动打包上传:

1.mvn clean install -Dmaven.test.skip=true(生成好几个jar包)

2.上传(两台服务器上传,总共6个jar包)

3.重新启动(虽说写了脚本,但还是要手动敲命令./restart 回车)。

起初,两台服务器还行,也没闲太麻烦,但是有一天做活动,考虑到业务量上升,需要把服务器扩到6台(当时我的内心是拒绝的,然并卵),还手动上传jar这种方式,那岂不是究极打工仔么,我自动部署一搞,岂不美滋滋?

说干就干,让运维把jenkins部署起来,我就开始搞自动部署了。

jenkins配置

新建任务

1.选择新建任务

2.输入任务名称,并选择构建一个maven项目,确定。

如果没有maven选项,可以在系统管理->插件管理->可选插件,搜索 Maven Integration plugin 下载安装,需要重启生效。

General

General是构建任务的一些基本配置。名称,描述之类的,这里调重点来讲。

项目名称: 是刚才创建构建任务步骤设置的,当然在这里也可以更改。

描述: 对构建任务的描述。

丢弃旧的构建: 服务器资源是有限的,有时候保存了太多的历史构建,会导致Jenkins速度变慢,并且服务器硬盘资源也会被占满。当然下方的"保持构建天数" 和 保持构建的最大个数是可以自定义的,需要根据实际情况确定一个合理的值。

其他几个选项在这里不做介绍,有兴趣的可以查看Jenkins"帮助信息", 会有一个大概的介绍。不过这些"帮助信息"都是英文的。

参数化构建过程选择选项参数和字符参数。

选项参数名称输入Status,选项输入Deploy、Rollback。

Deploy:发布最新版本

Rollback:版本回滚

字符参数名称输入Version,这个的值是用来版本回滚用的。

源码管理

源码管理就是配置你代码的存放位置。

Git: 支持主流的github 和gitlab代码仓库。因我们的研发团队使用的是gitlab,所以下面我只会对该项进行介绍。

Repository URL:仓库地址

Credentials:凭证。可以使用HTTP方式的用户名密码,也可以是RSA文件, 但要通过后面的"ADD"按钮添加凭证(不懂的可以百度)。

Branches to build:构建的分支。*/master表示master分支,也可以设置为其他分支。

构建触发器

构建触发器,顾名思义,就是构建任务的触发器(具体我也没用到,一下是百度来的,可以看看)。

触发远程构建(例如,使用脚本): 该选项会提供一个接口,可以用来在代码层面触发构建。

Build after other projects are built: 该选项意思是"在其他projects构建后构建"。

Build periodically: 周期性的构建。很好理解,就是每隔一段时间进行构建。日程表类似 linux crontab书写格式。

Poll SCM:该选项是配合上面这个选项使用的。当代码仓库发生改动,jenkins并不知道。需要配置这个选项,周期性的去检查代码仓库是否发生改动。

构建环境

构建环境就是构建之前的一些准备工作,如指定构建工具(这里也没有用到,感兴趣的可以研究一下)。

Pre Steps

编译前预处理步骤,我这边用于版本回滚。选择执行shell

输入以下文本

case $Status  in
Rollback)
echo "-----本次操作为回滚,版本号为$Version-----"
git reset --hard $Version
echo "-----回滚完成,打包中-----"
;;
*)
exit
;;
esac

Build

打包命令,如果编译的时候需要其他参数,可以加在后面。

Post Steps

build的后置工作,选择Run only if build succeeds(这里选择的是第二个),在bulid成功后才会执行此操作

由于编译完成的jar包要发布到其他的服务器上,这里选择Send files or execute commands over SSH(如果没有的话,请去插件管理中下载)。

**SSH Server ** 传输配置

name 传输的服务器(在系统配置的SSH Servers中配置,只需把jenkins服务器生成的id_rsa.pub放到传输的服务器上就行了,详情请百度)

Transfer 传输信息

​ Source file:需要scp到远程服务器的构建jar(如:target/yzwine-0.01.jar)

​ Remove prefix:移除掉构建jar的前缀(如:target/)

​ Remote directory:scp到远程服务器的目录(如:/usr/local/web)

​ Exec command:scp完成之后,执行的脚本命令(如:cd /usr/local/web && ./restart)最好进入文件夹执行,不要/usr/local/web/restart这样执行,很容易出问题

构建设置

没有用到,不做详解

构建后操作

没用到,不做详解

自动部署

如果直接发布,不用填写version,直接开始构建就好了,如果需要回滚,输入git上的commit_id,可以构建某个时刻的jar包

后续问题

jenkins传输问题

由于需要6台重新发布,准备在Post Steps这一步配置6台服务器传输部署,但是测试的时候就有问题。

先是配置了一台,从构建到发布需要3分钟(Jenkins服务器是上海阿里云,正式jar运行服务器是香港亚马逊的),初步一算,六台就要18分钟,如果发布login、service、cms,就要54分钟。。。

自动构建太慢的主要问题是传输太慢,而6台服务器是属于同一个内网的,那完全可以上传到一台服务器之后,这台服务器通过内网scp传输,那速度肯定是噶快噶快的。

#循环传输jar并重启服务,针对每个服务器第一次可能需要输入yes,后面都不需要了
#! /bin/sh
for i in 172.31.20.113 172.31.22.210 172.31.25.202 172.31.19.108 172.31.20.205 #内网地址
do
expect -c "
spawn scp -r /usr/local/web/xinxin-live-app-0.0.1-SNAPSHOT.jar xinxin@$i:/home/
expect {
\"*assword\" {set timeout 20; send \"123456\r\"; exp_continue;} #123456是传输密码
}
expect eof"
sleep 1
ssh root@$i 'cd /home && ./restartJar.sh' #进入目录,重启服务命令
done

果然,这样处理之后,部署时间就很快了(100M的jar几乎是秒传),基本上3分钟就能部署好,如果还要加服务器的话,在内网地址里面加就好了。

工作总结

很多时候,需要转换思路,不一定需要配置多个server上传,最终目的达到就行了。

当然,这个过程中少不了运维同事的配合,有一群志同道合的同事是真的很重要。

Jenkins自动部署spring boot的更多相关文章

  1. Jenkins 自动发布 Spring Boot 项目(Gitee)

    1.下载 wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war,并部署到tomcat下 2.机器安装好 java ,maven ,g ...

  2. springboot(十六):使用Jenkins部署Spring Boot

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...

  3. (转)Spring Boot(十六):使用 Jenkins 部署 Spring Boot

    http://www.ityouknow.com/springboot/2017/11/11/spring-boot-jenkins.html enkins 是 Devops 神器,本篇文章介绍如何安 ...

  4. 使用Jenkins部署Spring Boot项目

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...

  5. Spring Boot(十六):使用 Jenkins 部署 Spring Boot

    Jenkins 是 Devops 神器,本篇文章介绍如何安装和使用 Jenkins 部署 Spring Boot 项目 Jenkins 搭建.部署分为四个步骤: 第一步,Jenkins 安装 第二步, ...

  6. Spring Boot(十六):使用Jenkins部署Spring Boot

    Spring Boot(十六):使用Jenkins部署Spring Boot jenkins是devops神器,介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署 ...

  7. spring boot(十六)使用Jenkins部署spring boot

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...

  8. 使用Jenkins部署Spring Boot

    原文:http://www.cnblogs.com/ityouknow/p/7899349.html jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boo ...

  9. 使用 Jenkins + Ansible 实现 Spring Boot 自动化部署101

    本文要点:设计一条 Spring Boot 最基本的流水线:包括构建.制品上传.部署.使用 Docker 容器运行构建逻辑.自动化整个实验环境:包括 Jenkins 的配置,Jenkins agent ...

随机推荐

  1. 除了MD5加密,试一下签名吧

    需求 MD5加密,简单密码用彩虹表很容易破解. 密码不能被暴力破解,可以根据定制字符,时间戳等防止破解 解决方案 签名 密码加密 源码 const crypto = require('crypto') ...

  2. CAP、BASE、ACID

    CAP定理 定义 CAP定理(CAP theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Consistency) (等同于所有节点访问同一份最新的数据副本:写操作之 ...

  3. css 10-CSS3选择器详解

    10-CSS3选择器详解 #CSS3介绍 CSS3在CSS2基础上,增强或新增了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷. #CSS3的现状 浏览器支持程度不够好,有 ...

  4. XML外部实体注入

    文章参考链接: 参考视频: https://www.bilibili.com/video/BV1tW411o7Fd?from=search&seid=13868972487110648015 ...

  5. 中小学生的噩梦:怎样用Python检测抄袭行为?广大中小学生们的美梦就此结束

    本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器.搭建完成后,抄袭检测器将会从文件中载入学生们的作业,然后通过计算相似度来判断学生有无相互 ...

  6. Java基础进阶:APi使用,Math,Arrarys,Objects工具类,自动拆装箱,字符串与基本数据类型互转,递归算法源码,冒泡排序源码实现,快排实现源码,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    要点摘要 Math: 类中么有构造方法,内部方法是静态的,可以直接类名.方式调用 常用: Math.abs(int a):返回参数绝对值 Math.ceil(double a):返回大于或等于参数的最 ...

  7. 学习JUC源码(3)——Condition等待队列(源码分析结合图文理解)

    前言 在Java多线程中的wait/notify通信模式结尾就已经介绍过,Java线程之间有两种种等待/通知模式,在那篇博文中是利用Object监视器的方法(wait(),notify().notif ...

  8. flowable中使用到的一些方法。获取人员部门信息

    package org.springblade.desk.utils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf ...

  9. java集合大总结

    Java集合大总结 java集合框架简图(API关系图): 虚线框表示接口,实线框表示类. 特点和使用总结: Collection: 单列单值. List: 有序(查询顺序和插入顺序一致),有下标(索 ...

  10. [Machine Learning] 单变量线性回归(Linear Regression with One Variable) - 线性回归-代价函数-梯度下降法-学习率

    单变量线性回归(Linear Regression with One Variable) 什么是线性回归?线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方 ...