基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署

基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署

  • 1. 使用Docker搭建Jenkins
    • 1.1 拉取Jenkins镜像
    • 1.2 创建目录
    • 1.3 启动容器
    • 1.4 打开Jenkins管理页面
    • 1.5 查看日志获取初始密码
    • 1.6 安装推荐的插件
    • 1.7 成功安装Jenkins
  • 2. 配置Jenkins
    • 2.1 设置Jenkins时区为北京时间
    • 2.2 安装自动化构建和部署所需的插件
    • 2.3 添加凭据
    • 2.4 配置SSH remote hosts
    • 2.5 全局工具配置
      • 2.5.1 安装JDK
      • 2.5.2 安装Git
      • 2.5.3 安装Maven
      • 2.5.4 安装Docker
    • 2.6 全局安全配置
    • 2.7 关于webhook
  • 3. 新建Jenkins任务
    • 3.1 点击新建任务,输入名称【本处输入名称注意】
    • 3.2 源码管理
    • 3.3 构建触发器
    • 3.4 添加webhook
    • 3.5 构建环境
    • 3.6 Pre Steps(构建之前的步骤)
    • 3.7 Build(构建)
    • 3.8 Post Steps(执行任务)
    • 3.9 测试
  • 4. 参考资料

1. 使用Docker搭建Jenkins

1.1 拉取Jenkins镜像

进入官网:https://jenkins.io/download/
点击Docker进入Docker Hub
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第1张图片
我们这里选择jenkins/jenkins:lts版本的Jenkins,因为Jenkins:latest版本是官方版本,而且是英文的,下载插件什么的因为的各种原因导致无法下载和下载报错

复制红框中的命令:docker pull jenkins/jenkins:lts拉取镜像,如果下载镜像比较慢可以考虑给docker设置一个镜像加速【推荐使用aliyun的,不会的可以百度一下】
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第2张图片
在服务器上输入命令:

docker pull jenkins/jenkins:lts

基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第3张图片
注意查看 docker镜像中,Jenkins版本是否是最新版

命令:

docker inspect b137a5753eb1

基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第4张图片

1.2 创建目录

为了方便后期Jenkins中配置文件的修改,同时,防止jenkins中重要文件因为容器损毁或删除导致文件丢失,因此需要将/var/jenkins_home目录对外挂载

mkdir -p /apps/devops/jenkins

对目录开放docker进程操作的完全读写的权限

chmod 777 /apps/devops/jenkins

创建挂载目录并授权

1.3 启动容器

docker run -itd -p 9003:8080 -p 9004:50000  --restart always -v /apps/devops/jenkins:/var/jenkins_home --name jenkins  jenkins/jenkins:lts

-p 端口映射:Jenkins是Java程序,默认端口是8080
启动Jenkins容器

1.4 打开Jenkins管理页面

访问地址:

http://192.168.143.128:9003

基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第5张图片
出现如上页面,代表jenkins启动成功。

1.5 查看日志获取初始密码

命令:

docker logs -f jenkins

复制如下图中红框内的初始密码
当然,你也可以不通过日志查看,你可以进入黄色框中描述的文件查看初始密码也是一样的,二选一
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第6张图片
将密码复制、粘贴到如下框框中,进入jenkins,需要等待数十秒(可能更久)!
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第7张图片
如果出现下图情况,等很久,还没有进入
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第8张图片
解决方案
① 进入我们前面挂载的Jenkins目录 /apps/devops/jenkins,执行命令:

vi hudson.model.UpdateCenter.xml

② 将文件hudson.model.UpdateCenter.xmlhttps://updates.jenkins.io/update-center.json改成http://updates.jenkins.io/update-center.json(把https改成http)
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第9张图片
③ 保存,重启Jenkins容器

[root@localhost jenkins]# docker restart jenkins
jenkins
[root@localhost jenkins]# 

④ 重新进入Jenkins管理页面:http://192.168.142.128:9003(稍等一会儿,就可以进入步骤6.安装建议的插件页面

1.6 安装推荐的插件

如下图所示,左侧显示安装推荐的插件,右侧选择自定义安装插件。
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第10张图片
我们选择安装推荐的插件,点击左侧的

基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第11张图片
如果全部都能正确安装,则会自动进入如下图界面
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第12张图片
将信息输入对应输入框内,点击保存并完成,进入如下图所示
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第13张图片

1.7 成功安装Jenkins

默认,点击保存并完成,OK,这就算搭建成功了(因为我是在VMware CentOS7上使用Docker搭建的Jenkins,GitLab,gitlab又非常耗费资源,所以可能会卡住不动,重启一下Jenkins就可以了),如图
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第14张图片

2. 配置Jenkins

2.1 设置Jenkins时区为北京时间

点击系统管理——脚本命令行
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第15张图片
输入脚本并运行

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

如图显示Result表示成功
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第16张图片

2.2 安装自动化构建和部署所需的插件

所需插件:【Maven Integration】、【Pipeline Maven Integration】、【Gitlab】、【Gitlab hook】、【SSH】、【Publish Over SSH】

进入系统管理——插件管理
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第17张图片
① 安装Maven插件:点击可选插件——过滤MavenIntegration插件——勾选Maven Integration和Pipeline Maven Integration——点击直接安装
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第18张图片
如图,开始安装Maven插件
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第19张图片
② 安装Gitlab插件:点击可选插件——过滤Gitlab插件——勾选Gitlab和Gitlab hook——点击直接安装
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第20张图片
如图,开始安装Gitlab插件
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第21张图片
③ 安装SSH插件和Publish Over SSH插件:点击可选插件——过滤SSH插件——勾选SSH和Publish Over SSH——点击直接安装

安装Publish Over SSH插件的原因:因为本方式是使用docker启动jenkin服务,所以在jenkins后续执行构建任务时候,需要在build成功后,将服务的jar包[以spring boot]服务为例,需要将jar包拷贝到Dockerfile所在服务器的指定目录,进行微服务的启动;所以,此处需要配置SSH服务器的连接,意思就是在jenkins的任务结束后,去执行指定的服务器上的shell命令,做spring boot或cloud服务的镜像的构建,容器的运行,等一系列的事情
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第22张图片
如图,开始安装SSH插件
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第23张图片
插件全部安装完成后,可以重启一下Jenkins

2.3 添加凭据

基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第24张图片
点击添加凭据——输入宿主机服务器的用户名和密码
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第25张图片
点击确定
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第26张图片

2.4 配置SSH remote hosts

这个配置是干什么的呢?配置SSH连接Dockerfile所在服务器的相关信息,并添加凭证,最后测试连接并保存,以备后面使用!!!

点击系统管理——系统设置
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第27张图片
找到配置——下拉选择SSH remote hosts
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第28张图片
如下图,输入对应的信息,并校验是否连接成功!成功后,点击应用——点击保存
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第29张图片

2.5 全局工具配置

由于我们要实现的是SpringBoot项目的自动化部署操作,所以需要安装JDK、Git、Maven、Docker
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第30张图片

2.5.1 安装JDK

可以安装多个,根据项目JDK版本需求

输入自定义JDK名称——勾选自动安装——输入Oracle账户、密码——选择JDK版本——勾选同意协议
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第31张图片
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第32张图片

2.5.2 安装Git

输入自定义Git名称——勾选自动安装
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第33张图片

2.5.3 安装Maven

输入自定义名称——勾选自动安装——选择版本
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第34张图片

2.5.4 安装Docker

输入自定义名称——勾选自动安装
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第35张图片
最后,点击应用——点击保存,OK,完成

那这些在什么时候才真正的安装了呢?

是在初次使用到JDK或Maven的时候,才会去自动安装

2.6 全局安全配置

点击系统管理——全局安全配置
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第36张图片
去掉防止跨站点请求伪造前的勾——点击应用——保存
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第37张图片
这里要说明一下为什么去掉这个勾选:

webhooks与jenkins配合使用时提示:HTTPStatus403-Novalidcrumbwasincludedintherequest,这是因为jenkins在http请求头部中放置了一个名为.crumb的token。在使用了反向代理,并且在jenkins设置中勾选了“防止跨站点请求伪造(Prevent Cross Site Request Forgery exploits)”之后此token会被转发服务器apache/nginx认为是不合法头部而去掉。导致跳转失败。

2.7 关于webhook

这里需要声明一下:

1.webhook网络钩子
	可以看成是一个callback  回调方法
	本回调方法核心即包含:
	    触发条件+可供触发的URL+密码(可选) 
	    触发条件为:push、merge、PR(即 New  Pull Request)等等git操作,
	    比如你提交一个push操作,就会触发URL请求,会以POST请求去请求这个URL。
		除此以外,你还可以自己指定这个POST请求的数据格式。(JSON,x-www-form-urlencoded等)。

2.webhook是gitlab端的
	触发webhook的条件,可以自行配置,都是本地对gitlab的git操作
	触发后去请求的URL地址,是Jenkins提供的。也就是触发后是去请求Jenkins的

3.而实现代码从gitlab到jenkins到自动部署,webhook就是gitlab和jenkins之间的关键点。
	后续会先配置jenkins,以获取到URL和Token,拿着这两个东西去gitlab配置webhook,即可。
	同时,webhook本身还会有很多的触发条件可以勾选。后续步骤可见!

3. 新建Jenkins任务

3.1 点击新建任务,输入名称【本处输入名称注意】

【注意,本名称一般和项目名称一致,因为本名称会在jenkins工作空间下生成目录,类似于IDEA或Ecplise的工作空间的概念】

【所以,一般情况下,保证本名称=项目名称=docker镜像名称=docker容器名称 这样能尽可能的减轻jenkins配置的shell命令的复杂性!从而形成一定的规范!!】

选择构建一个Maven项目【因为是springboot的服务】

基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第38张图片

3.2 源码管理

输入描述信息,源码管理选择Git,从gitlab复制克隆地址粘贴到Repository URL中,没有报错就表示OK的,(注意,这里我是克隆HTTP方式的地址,如果你是克隆SSH方式的地址,你需要添加Creadentials,配置个API Token就可以了)
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第39张图片

3.3 构建触发器

这里会获取到文章开始提到的URL和Token,这两个东西需要记录下来,供gitlab配置webhook使用
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第40张图片
点击高级,拉下来找到Generate并点击,生成一串Secret Token:24d90d26b374ae2df2cda01c17338843(拿小本本记一下这个Token,等下跟上面的URL都会用到的)
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第41张图片

3.4 添加webhook

前往gitlab,进入要构建的项目,在setting中选择Integrations,输入URLSecret Token 这两在上面图中已经给你标注了,去掉Enable SSL verification的勾选

根据自己的需求,勾选webhook的触发事件都有哪些
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第42张图片
点击Add webhook,如图表示成功添加了webhook
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第43张图片

3.5 构建环境

勾选Add timestamps to the Console Output,等下可以看到控制台打印的信息,这个根据自己的需求勾选哈
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第44张图片

3.6 Pre Steps(构建之前的步骤)

配置前一步需要做的事情是:清理本项目在jenkins的workspace中的历史文件夹

你可以不用知道WORKSPACE具体的地址在哪里,因为下方有链接可以查看到当前jenkins中有哪些可用的变量供你使用

默认WORKSPACE地址:/var/jenkins_home/workspace(如果你jenkins是docker启动的,并且挂载了目录在宿主机,那你在宿主机也是可以看到的,即 /apps/Devops/jenkins/workspace)

本处选择是是,执行shell,则表示本处配置的shell命令,是默认在jenkins容器中执行的,而不是在宿主机上

下拉选择执行 shell
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第45张图片
打开可用的环境变量列表看看,WORKSPACE是我们要的
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第46张图片
在执行 shell的命令中输入以下命令,设置全局变量

SERVER_NAME_1=springboot
echo "=========================>>>>>>>工作空间WORKSPACE的地址:$WORKSPACE "
cd $WORKSPACE
echo "=========================>>>>>>>进入工作空间WORKSPACE,清除工作空间中原项目的工作空间$SERVER_NAME_1 "
rm -rf $SERVER_NAME_1
echo "=========================>>>>>>>清除工作空间中原项目的工作空间$SERVER_NAME_1 ......成功success"

注意:本处的SERVER_NAME_1=springboot 是配置项目的名称

3.7 Build(构建)

我们是springboot项目,所以用到maven,这里设置一下全局操作,clean项目,并打成jar包,所以这里输入:

clean package

基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第47张图片

3.8 Post Steps(执行任务)

只在jenkins构建成功后,才执行这一步

因为最后的构建成功的maven项目的jar包是以docker启动服务为目的,所以最后的docker操作,一定是在jenkins容器以外的服务器上运行的,可能是本机宿主机,也可能是远程的服务器,这个根据自己的情况去配置

本处选择,在远程的SSH执行shell脚本

选中只有构建成功才执行这些命令,然后选择Execute shell script on remote host using ssh
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第48张图片
创建SSH执行命令,命令内容太多了,从创建文件夹和Dockerfile到docker容器运行,有需要的自己去下载,SSH执行命令下载地址
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第49张图片
OK,到这里基本的任务已经新建成功,至于后续的两个步骤,根据自己的需求自行配置,没有难度的
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第50张图片
点击应用保存

3.9 测试

测试push事件触发自动化构建和部署
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第51张图片
前往gitlab,刚我们新增的webhook,点击test下拉选择push events,出现HTTP 200表示OK了
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第52张图片
回到Jenkins可以看到任务列表,进入任务列表中的springboot,可以看到构建历史
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第53张图片
点击构建历史中的其中一个任务,可以看到真正构建中
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第54张图片
点击控制台输出,可以看到执行的命令都在控制台输出了
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第55张图片
看到控制台输出最后显示:SUCESS 表示成功了
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第56张图片
在服务器上执行命令

docker ps

可以看到我们启动起来的springboot容器
启动起来的容器
在浏览器输入:http://服务器ip:9009/test 即可访问刚自动部署的项目
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署_第57张图片
至此,我们的自动部署就已经完成,如果大家有哪里不懂的或者我写的不对的,敬请指教!

4. 参考资料

Angel挤一挤 《【Devops】【docker】【CI/CD】2.docker启动jenkins环境+安装必要的插件 》

你可能感兴趣的:(Jenkins)