三十二张图告诉你,Jenkins构建Spring Boot 有多简单~
持续原创输出,点击上方蓝字关注我
目录
前言 如何安装Jenkins? 环境准备 开始安装Jenkins
初始化配置 访问首页 输入管理员密码 安装插件 创建管理员 实例配置 配置完成
构建Spring Boot 项目 配置JDK、maven、Git环境 安装插件 添加 SSH Server 添加凭据 新建Maven项目 构建任务
如何构建托管在GitLab的项目? 安装插件 添加GitLab API token 配置GitLab插件 新建任务 后续操作
多模块项目如何构建? 总结
前言
自动持续集成不知道大家伙有没有听说过,有用过类似的工具吗?
简而言之,自动持续集成的工作主要是能对项目进行构建、自动化测试和发布。
今天这篇文章就来讲讲常用的持续集成的工具Jenkins
以及如何自动构建Spring Boot
项目。
如何安装Jenkins?
Jenkins
是Java开发的一套工具,可以直接下载war
包部署在Tomcat
上,但是今天作者用最方便、最流行的Docker
安装。
环境准备
在开始安装之前需要准备以下环境和工具:
一台服务器,当然没有的话可以用自己的电脑,作者的服务器型号是 Ubuntu
。JDK
环境安装,作者的版本是1.8
,至于如何安装,网上很多教程。准备 maven
环境,官网下载一个安装包,放在指定的目录下即可。Git
环境安装,网上教程很多。代码托管平台,比如 Github
、GitLab
等。
开始安装Jenkins
Docker
安装Jenkins
非常方便,只要跟着作者的步骤一步步操作,一定能够安装成功。
Docker环境安装
每个型号服务器安装的方式各不相同,读者可以根据自己的型号安装,网上教程很多。
拉取镜像
我这里安装的版本是jenkins/jenkins:2.222.3-centos
,可以去这里获取你需要的版本: https://hub.docker.com/_/jenkins?tab=tags
。执行如下命令安装:
docker pull jenkins/jenkins:2.222.3-centos
创建本地数据卷
在本地创建一个数据卷挂载docker容器中的数据卷,我创建的是/data/jenkins_home/
,命令如下:
mkdir -p /data/jenkins_home/
需要修改下目录权限,因为当映射本地数据卷时,/data/jenkins_home/
目录的拥有者为root
用户,而容器中jenkins
用户的 uid
为 1000
。
chown -R 1000:1000 /data/jenkins_home/
创建容器
除了需要挂载上面创建的/data/jenkins_home/
以外,还需要挂载maven
、jdk
的根目录。启动命令如下:
docker run -d --name jenkins -p 8040:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home -v /usr/local/jdk:/usr/local/jdk -v /usr/local/maven:/usr/local/maven jenkins/jenkins:2.222.3-centos
以上命令解析如下:
-d
:后台运行容器--name
:指定容器启动的名称-p
:指定映射的端口,这里是将服务器的8040
端口映射到容器的8080
以及50000
映射到容器的50000
。
「注意:」8040
和50000
一定要是开放的且未被占用,如果用的是云服务器,还需要在管理平台开放对应的规则。-v
:挂载本地的数据卷到docker
容器中,「注意:」 需要将JDK
和maven
的所在的目录挂载。
初始化配置
容器启动成功,则需要配置Jenkins
,安装一些插件、配置远程推送等等。
访问首页
容器创建成功,访问http://ip:8040
,如果出现以下页面表示安装成功:
输入管理员密码
启动成功,则会要求输入密码,如下图:
这里要求输入的是管理的密码,提示是在/var/jenkins_home/secrets/initialAdminPassword
,但是我们已经将/var/jenkins_home
这个文件夹挂载到本地目录了,因此只需要去挂载的目录/data/jenkins_home/secrets/initialAdminPassword
文件中找。
输入密码,点击继续。
安装插件
初始化安装只需要安装社区推荐的一些插件即可,如下图:
这里选择安装推荐的插件
,然后 Jenkins
会自动开始安装。
「注意:」 如果出现想插件安装很慢的问题,找到/data/jenkins_home/updates/default.json
文件,替换的内容如下:
将 updates.jenkins-ci.org/download
替换为mirrors.tuna.tsinghua.edu.cn/jenkins
将 www.google.com
替换为www.baidu.com
。
执行以下两条命令:
sed -i 's/www.google.com/www.baidu.com/g' default.json
sed -i 's/updates.jenkins-ci.org\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
全部安装完成,继续下一步。
创建管理员
随便创建一个管理员,按要求填写信息,如下图:
实例配置
配置自己的服务器IP
和端口
,如下图:
配置完成
按照以上步骤,配置完成后自动跳转到如下界面:
构建Spring Boot 项目
在构建之前还需要配置一些开发环境,比如JDK
,Maven
等环境。
配置JDK、maven、Git环境
Jenkins
集成需要用到maven
、JDK
、Git
环境,下面介绍如何配置。
首先打开系统管理
->全局工具配置
,如下图:
分别配置JDK
,Git
,Maven
的路径,根据你的实际路径来填写。
「注意」:这里的JDK
、Git
、Maven
环境一定要挂载到docker
容器中,否则会出现以下提示:
xxxx is not a directory on the Jenkins master (but perhaps it exists on some agents)
配置成功后,点击保存。
安装插件
除了初始化配置中安装的插件外,还需要安装如下几个插件:
Maven Integration
Publish Over SSH
打开系统管理
-> 插件管理
,选择可选插件
,勾选中 Maven Integration
和 Publish Over SSH
,点击直接安装
。
在安装界面勾选上安装完成后重启 Jenkins
。
添加 SSH Server
SSH Server
是用来连接部署服务器的,用于在项目构建完成后将你的应用推送到服务器中并执行相应的脚本。
打开 系统管理
-> 系统配置
,找到 Publish Over SSH
部分,选择新增
点击 高级
展开配置
最终配置如下:
配置完成后可点击 Test Configuration
测试连接,出现 success
则连接成功。
添加凭据
凭据 是用来从 Git
仓库拉取代码的,打开 凭据
-> 系统
-> 全局凭据
-> 添加凭据
这里配置的是Github
,直接使用用户名
和密码
,如下图:
创建成功,点击保存。
新建Maven项目
以上配置完成后即可开始构建了,首先需要新建一个Maven
项目,步骤如下。
创建任务
首页点击新建任务
->构建一个maven项目
,如下图:
源码管理
在源码管理中,选择Git
,填写仓库地址
,选择之前添加的凭证
。
构建环境
勾选 Add timestamps to the Console Output
,代码构建的过程中会将日志打印出来。
构建命令
在Build
中,填写 Root POM
和 Goals and options
,也就是你构建项目的命令。
Post Steps
选择Run only if build succeeds
,添加 Post
步骤,选择 Send files or execute commands over SSH
。
上图各个选项解析如下:
name
:选择前面添加的SSH Server
Source files
:要推送的文件Remove prefix
:文件路径中要去掉的前缀,Remote directory
:要推送到目标服务器上的哪个目录下Exec command
:目标服务器上要执行的脚本
Exec command
指定了需要执行的脚本,如下:
# jdk环境,如果全局配置了,可以省略
export JAVA_HOME=/xx/xx/jdk
export JRE_HOME=/xx/xx/jdk/jre
export CLASSPATH=/xx/xx/jdk/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# jenkins编译之后的jar包位置,在挂载docker的目录下
JAR_PATH=/data/jenkins_home/workspace/test/target
# 自定义的jar包位置
DIR=/data/test
## jar包的名称
JARFILE=swagger-demo-0.0.1-SNAPSHOT.jar
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9
if [ -f $DIR/backup/$JARFILE ]; then
rm -f $DIR/backup/$JARFILE
fi
mv $JAR_PATH/$JARFILE $DIR/backup/$JARFILE
java -jar $DIR/backup/$JARFILE > out.log &
if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi
cd $DIR/backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
以上脚本大致的意思就是将kill
原有的进程,启动新构建jar
包。
脚本可以自己定制,比如备份
Jar
等操作。
构建任务
项目新建完成之后,一切都已准备就绪,点击立即构建
可以开始构建任务,控制台可以看到log
输出,如果构建失败,在log
中会输出原因。
任务构建过程会执行脚本启动项目。
如何构建托管在GitLab的项目?
上文介绍的例子是构建Github
仓库的项目,但是企业中一般都是私服的GitLab
,那么又该如何配置呢?
其实原理是一样的,只是在构建任务的时候选择的是GitLab
的凭据,下面将详细介绍。
安装插件
在系统管理
->插件管理
->可选插件
中搜索GitLab Plugin
并安装。
添加GitLab API token
首先打开 凭据
-> 系统
-> 全局凭据
-> 添加凭据
,如下图:
上图中的API token
如何获取呢?
打开GitLab
(例如公司内网的GitLab
网站),点击个人设置菜单下的setting
,再点击Account
,复制Private token
,如下:
上图的Private token
则是API token
,填上即可。
配置GitLab插件
打开系统管理
->系统配置
->GitLab
,如下图:
配置成功后,点击Test Connection
,如果提示Success
则配置成功。
新建任务
新建一个Maven任务,配置的步骤和上文相同,唯一区别则是配置Git
仓库地址的地方,如下图:
仓库地址和凭据需要填写Gitlab
相对应的。
后续操作
后续一些操作,比如构建项目,控制台输出等操作,都是和GitHub
操作相同,不再赘述了。
多模块项目如何构建?
如果你的多模块不是通过私服仓库依赖的,那么在构建打包是有先后顺序的,在新建任务的时候需要配置Build
的maven
命令,如下图:
上图中的Goals and options
中的命令就是构建api
这个模块的命令,至于这个命令是什么意思,前面有单独一篇文章介绍过,请看一次打包引发的思考,原来maven还能这么玩~。
总结
本文详细的介绍了如何从零安装部署一个Jenkins
,这下又能吹牛了,哈哈....
如果觉得不错,点个赞不迷路~
三十二张图告诉你,Jenkins构建Spring Boot 有多简单~的更多相关文章
- 十二张图:从0开始理解对称/非对称加密、CA认证、以及K8S各组件颁发证书原由
目录 一.对称加密 二.对称加密-不安全 三.非对称加密 四.非对称加密-不安全 五.对称加密和非对称加密结合 六.对称加密和非对称加密结合-不安全 七.Https的做法-引入CA机构 八.乘胜追击理 ...
- 一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式
前言 有时候我们需要在应用启动时执行一些代码片段,这些片段可能是仅仅是为了记录 log,也可能是在启动时检查与安装证书 ,诸如上述业务要求我们可能会经常碰到 Spring Boot 提供了至少 5 种 ...
- 数据结构(三十二)图的遍历(DFS、BFS)
图的遍历和树的遍历类似.图的遍历是指从图中的某个顶点出发,对图中的所有顶点访问且仅访问一次的过程.通常有两种遍历次序方案:深度优先遍历和广度优先遍历. 一.深度优先遍历 深度优先遍历(Depth_Fi ...
- 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...
- NeHe OpenGL教程 第三十二课:拾取游戏
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 一张图告诉你为什么 Gmail 是最好的邮箱,以及大量私货
今天早上,我的同事详细介绍了 Gmail 相比其他邮箱的优势,比如强大的垃圾邮件过滤.简单的使用界面.强大的功能设置等等.但是对我来说,这些并不是我使用 Gmail 的最重要原因. 我第一个正式的邮箱 ...
- Java进阶(三十二) HttpClient使用详解
Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...
- 微信小程序把玩(三十二)Image API
原文:微信小程序把玩(三十二)Image API 选择图片时可设置图片是否是原图,图片来源.这用的也挺常见的,比如个人中心中设置头像,可以与wx.upLoadFile()API使用 主要方法: wx. ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
随机推荐
- P 2568 GCD
对于这道题,我们要求的是 \(\displaystyle \sum_{i=1}^{N}\sum_{j = 1} ^{N}\) gcd(i,j)为质数 首先我们很容易想出来怎么打暴力,我们可以对于每个 ...
- 二进制安装MySQL-5.7.28
系统基础优化 #更改主机名 hostname msyql echo "msyql" >/etc/hostname #修改字符集 echo "LANG="z ...
- Java学习之动态代理篇
Java学习之动态代理篇 0x00 前言 在后面的漏洞研究的学习中,必须要会的几个知识点.反射机制和动态代理机制.至于反射的前面已经讲到过了,这里就不做更多的赘述了. 0x01 动态代理 这里先来讲一 ...
- regsvr32 bypass windows defender 新思路
原文链接:blog 在对regsvr32的用法进行了解之后,对于Casey Smith的远程js脚本执行命令的思路很感兴趣. 命令语法如下: regsvr32 /s /n /u /i:http://1 ...
- 《python 网络数据采集》代码更新
<python 网络数据采集>这本书中会出现很多这一段代码: 1 from urllib.request import urlopen 2 from bs4 import Beautifu ...
- 【迷宫问题】CodeForces 1292A A NEKO's Maze Game
题目大意 vjudge链接 共两行,从(1,n)到(2,n). 每过一个时刻会有一个位置的状态变化,从能到达这个位置变成不能到达,或从不能到达变成能到达,问在每个时刻中是否能从起点到终点. 数据范围 ...
- 生物信息-McScan(Python-jcvi)共线性画图
比较基因组学中,共线性的分析的图无疑是最漂亮的. 共线性分析可以很好地解释进化关系和多倍化事件. 本文主要介绍的是唐老师的Python版McScan(jcvi工具包),这个包很强大,但是其功能在官网的 ...
- golang 爬取百度贴吧绝地求生页面
package main import ( "github.com/antchfx/htmlquery" "io" "net/http" & ...
- spring boot:用rocketmq发送延时消息用来取消订单(spring boot 2.3.3)
一,为什么要用延时消息来取消订单? 1,为什么要取消订单 在电商的下单过程中,需要在生成订单时扣减库存, 但有可能发生这种情况:用户下了单,临时改变主意不再支付, 则订单不能无限期的保留,因为还要把占 ...
- 第三章 rsync 命令详解和实战用法
一.rsync传输模式 1.本地模式2.远程模式3.守护进程模式 二.守护进程模式 1.安装rsync[root@backup ~]# yum -y install rsync 2.配置rsync[r ...