前言
自动持续集成不知道大家伙有没有听说过,有用过类似的工具吗?
简而言之,自动持续集成的工作主要是能对项目进行构建、自动化测试和发布。
今天这篇文章就来讲讲常用的持续集成的工具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
。执行如下命令安装:
1 | docker pull jenkins/jenkins:2.222.3-centos |
创建本地数据卷
在本地创建一个数据卷挂载docker容器中的数据卷,我创建的是/data/jenkins_home/
,命令如下:
1 | mkdir -p /data/jenkins_home/ |
需要修改下目录权限,因为当映射本地数据卷时,/data/jenkins_home/
目录的拥有者为root
用户,而容器中jenkins
用户的 uid
为 1000
。
1 | chown -R 1000:1000 /data/jenkins_home/ |
创建容器
除了需要挂载上面创建的/data/jenkins_home/
以外,还需要挂载maven
、jdk
的根目录。启动命令如下:
1 | 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
一定要是开放的且未被占用,如果用的是云服务器,还需要在管理平台开放对应的规则。
4. -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
。
执行以下两条命令:
1 | sed -i 's/www.google.com/www.baidu.com/g' default.json |
全部安装完成,继续下一步。
创建管理员
随便创建一个管理员,按要求填写信息,如下图:
实例配置
配置自己的服务器IP
和端口
,如下图:
配置完成
按照以上步骤,配置完成后自动跳转到如下界面:
构建Spring Boot 项目
在构建之前还需要配置一些开发环境,比如JDK
,Maven
等环境。
配置JDK、maven、Git环境
Jenkins
集成需要用到maven
、JDK
、Git
环境,下面介绍如何配置。
首先打开系统管理
->全局工具配置
,如下图:
分别配置JDK
,Git
,Maven
的路径,根据你的实际路径来填写。
注意:这里的JDK
、Git
、Maven
环境一定要挂载到docker
容器中,否则会出现以下提示:
1 | 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
指定了需要执行的脚本,如下:
1 | # jdk环境,如果全局配置了,可以省略 |
以上脚本大致的意思就是将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
,这下又能吹牛了,哈哈….
如果觉得不错,点个赞不迷路~
另外作者的第一本PDF
书籍已经整理好了,由浅入深的详细介绍了Mybatis基础以及底层源码,有需要的朋友公众号回复关键词Mybatis进阶即可获取,目录如下: