Docker+Jenkins+GitLab+Maven+SpringBoot&SpringCloud
自动化构建与部署指南文档说明书&工程源代码案例
目录
1、前言...............................................................................................................................................4
1.1 目的与初衷...........................................................................................................................4
1.2 什么是 DevOps..................................................................................................................... 5
1.3 软件环境搭建内容...............................................................................................................5
1.4 操作系统目录知识..............................................................................................................5
1.5 准备工作与事项..................................................................................................................6
2、 Docker 基础知识........................................................................................................................ 7
2.1、Docker 理念与出现原因................................................................................................... 7
2.1.1 Docker 理念............................................................................................................... 7
2.1.2 Docker 为什么出现................................................................................................... 7
2.2、为什么说“一次构建,到处运行”............................................................................... 8
2.2.1 更快的应用交付和部署........................................................................................... 8
2.2.2 更便捷的升级和扩缩容........................................................................................... 8
2.2.3 更简单的系统运维....................................................................................................8
2.2.4 更高效的技术资源利用........................................................................................... 8
2.3、Docker 底层原理............................................................................................................... 9
2.3.1 Docker 是怎么工作的............................................................................................... 9
2.3.2 为什么 Docker 比虚拟机 VM 快.............................................................................. 9
2.4、Docker 有哪些优势......................................................................................................... 10
2.4.1 Docker 安装软件更简单......................................................................................... 10
2.4.2 Docker 五大优势..................................................................................................... 10
2.5、Docker 系统架构............................................................................................................ 10
2.5.1 Docker 系统架构图................................................................................................. 10
2.5.2 Docker 架构几个概念............................................................................................. 11
2.6、Docker 安装步骤............................................................................................................ 12
2.6.1 Docker CE 与 Docker EE 的区别........................................................................12
2.6.2 移除旧的版本:......................................................................................................12
2.6.3 更新 yum 缓存...................................................................................................... 12
2.6.4 启动 Docker 后台服务............................................................................................ 12
2.6.5 开机自动启动 Docker............................................................................................. 12
2.6.6 测试 Docker............................................................................................................. 13
2.6.7 有哪些加速器服务进行选择呢?......................................................................... 13
2.7、Docker 与 NetWork...................................................................................................... 14
2.7.1 为什么要使用 NetWork..........................................................................................14
2.7.2 常用命令..................................................................................................................14
2.8、Docker 与 Registry........................................................................................................14
2.8.1 为什么用 registry.................................................................................................... 14
2.8.2 拉取 registry 镜像.................................................................................................. 15
2.8.3 运行 registry........................................................................................................... 15
2.8.4 修改 daemon.json 文件.......................................................................................... 15
2.8.5 重新加载 daemon 文件&重启 docker................................................................... 15
2.8.6 浏览器验证是否成功............................................................................................. 15
3、Docker 与 Gitlab 详解.................................................................................................................15
3.1 Linux 版本........................................................................................................................... 16
3.2 Docker 版本.........................................................................................................................16
3.4 获取 gitlab 镜像包..............................................................................................................16
3.5 在本机准备 gitlab 工作目录..............................................................................................17
3.6 运行脚本启动 GitLab......................................................................................................... 17
3.7 修改 gitlab.rb 配置文件..................................................................................................... 17
3.8 进去 gitlab 容器重启服务..................................................................................................18
3.9 重启 gitlab 容器命令..........................................................................................................19
3.10 检查启动信息...................................................................................................................19
3.11 查看本机端口状态...........................................................................................................19
3.12 GitLab 命令....................................................................................................................... 19
3.13 浏览器检查是否安装成功.............................................................................................. 20
3.14 GitLab 主界面................................................................................................................... 20
4、CentOS 安装 Git..........................................................................................................................21
4.1 git 简介................................................................................................................................21
4.2 git 的作用............................................................................................................................21
4.3 git 安装命令........................................................................................................................21
4.4 git 常见命令........................................................................................................................21
5、 CentOS7 与 JDK 详解................................................................................................................23
5.1 什么是 JDK........................................................................................................................ 23
5.2 JDK 安装准备工作.............................................................................................................23
5.3 创建指定文件目录.............................................................................................................24
5.4 解压指定文件.....................................................................................................................24
5.5 拷贝指定目录.....................................................................................................................24
5.6 配置环境变量.....................................................................................................................25
6、 CentOS7 与 Maven 详解.......................................................................................................... 25
6.1 什么是 Maven...................................................................................................................26
6.2 Maven 安装准备工作........................................................................................................26
6.3 指定文件目录安装.............................................................................................................27
6.4 解压指定文件.....................................................................................................................27
6.5 拷贝指定目录.....................................................................................................................27
6.6 配置环境变量.....................................................................................................................27
7、Docker 与 Jenkins 安装与事项详解.......................................................................................... 28
7.1 什么是 Jenkins....................................................................................................................28
7.2 Jenkins 安装准备工作........................................................................................................28
7.3 Jenkins 安装图解说明........................................................................................................29
7.4 设置全局工具.....................................................................................................................30
7.5 系统设置.............................................................................................................................32
7.6 添加全局用户名凭证.........................................................................................................34
7.7 凭证类型方式.....................................................................................................................34
7.8 插件安装.............................................................................................................................35
8、 私钥与公钥详解.......................................................................................................................37
8.1 为什么要公钥和私钥........................................................................................................37
8.2 公钥与公钥的区别.............................................................................................................37
8.3 公钥与公钥通信图解.........................................................................................................38
8.4 公钥与公钥通信原理.........................................................................................................38
8.5 公钥与公钥生成&免密登录操作......................................................................................39
8.5.1 公钥和私钥生成......................................................................................................39
8.5.2 免密登录操作..........................................................................................................39
8.6 配置 Gitlab 公钥.................................................................................................................40
9、 Docker、Jenkins 等编译镜像与部署详解.............................................................................. 41
9.1、需要准备的工作有哪些..................................................................................................41
9.2、SpringBoot 配置和代码详解...........................................................................................42
9.2.1 SpringBoot 简要.......................................................................................................42
9.2.2 工程的 pom.xml 配置............................................................................................. 42
9.2.3 no main manifest attribute 错误解决.....................................................................44
9.2.4 env 环境变量文件...................................................................................................45
9.2.5 Dockerfile 打包工程镜像细讲................................................................................45
9.2.6 工程文件结构..........................................................................................................46
9.2.7 build.sh 文件 shell 脚本详解.................................................................................. 46
9.2.8 不同环境的配置文件............................................................................................. 52
9.2.9 Controller 测试代码................................................................................................ 52
9.3、非多台机器免密远程登录&Jenkins 部署流程详解......................................................52
9.3.1 特别说明..................................................................................................................52
9.3.2 新建 maven 工程....................................................................................................53
9.3.3 参数化构建过程说明............................................................................................. 53
9.3.4 源码管理.................................................................................................................55
9.3.5 Build 编译设置........................................................................................................ 55
9.3.6 SSH Publishers 设置.................................................................................................55
9.3.7 构建与编译部署项目............................................................................................ 56
9.3.8 运行&部署结果......................................................................................................57
9.4、多台机器免密远程登录&Jenkins 部署流程详解..........................................................59
9.4.1 特别说明..................................................................................................................59
9.4.2 新建 maven 工程....................................................................................................59
9.4.3 参数化构建过程说明............................................................................................ 59
9.4.4 源码管理.................................................................................................................61
9.4.5 Build 编译设置........................................................................................................ 61
9.4.6 SSH Publishers 设置.................................................................................................61
9.4.7 构建与编译部署项目............................................................................................ 63
9.4.8 运行&部署结果......................................................................................................64
10、 总结&建议&学习................................................................................................................... 65
10.1 总结与建议.......................................................................................................................66
10.2 工程源代码&推荐学习&参考文章.................................................................................66
姓名
日期
梁继龙
梁继龙
梁继龙
梁继龙
梁继龙
梁继龙
梁继龙
梁继龙
梁继龙
2019-07-11
2019-07-12
2019-07-13
2019-07-15
2019-07-16
2019-07-17
2019-07-18
2019-07-19
2019-08-13
版本
V.0.0.1
V.0.0.1
V.0.0.1
V.0.0.1
V.0.0.1
V.0.0.1
V.0.0.1
V.0.0.1
V.0.0.1
说明
初稿创建
添加 Docker 基础知识
添加 Gitlab 详解
添加 JDk、Maven
添加私钥和公钥
添加 Jenkins 部署过程
添加操作系统目录&修改文档
优化文档&修改文档知识点
优化文档&添加自动启动 Docker
1、前言
1.1 目的与初衷
本文档主要结合工作过程中部署不同环境服务器的项目案例场景为初心进行实际细讲
文档会涉及 Docker 常见的知识点的结合一起使用的场景实操。
本文档会讲述 Docker、Jenkins、GitLab、SpringBoot、Maven 等技术结合实现自动化运
维部署(OpsDev)应用工程,适合 SpringCloud 部署。
1.2 什么是 DevOps
DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用
于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与
整合,它是一种重视“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通合作的
文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布
软件能够更加地快捷、频繁和可靠。
它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发
和运营工作必须紧密合作。
1.3 软件环境搭建内容
基于 Linux 内核的 CentOS-7-x86_64-Minimal-1810.iso 操作系统上进行完成
在文档会涉及 JDK(JDK1.8),Maven(Maven3.6.x)的安装过程讲解
如何在 Docker 上面安装 GitLab 详解和实际应用
如何在 Docker 创建 NetWork 网络与在工程中使用该网络
如何在 Docker 安装 Registry 私服与在工程中如何推送和拉取镜像
如何在 Docker(Version:18.09.6)上面如何安装 Jenkins 详解和实际应用
如何使用 Maven 结合 Docker 把 SpringBoot 应用编译成可用的镜像进行部署。
其中 JDK 和 Maven 是传统方式进行安装,由于有些软件在 Docker 安装过程并
没传统方式安装简单,比如:Jenkins。
1.4 操作系统目录知识
在整个文档里面都会提到软件安装/usr/local 这个目录,但是有些包含/home 是存放源码
的路径,当初学习 Docker-compose 的时候,不知道这个软件是一个二进制文件,然后
不按照系统的要求来安装,一直以为是下载过程文件损坏了或者哪里不正确,当初权限
也授权了还是没执行成功。故去谷歌找了几篇文章才知道其中问题所在,科普一下 Linux
操作系统目录知识点。
目录结构图
存放二进制可执行文件(ls,cat,mkdir 等)
存放用于系统引导时使用的各种文件
目录说明
目录说明
存放系统配置文件
用于存放设备文件
目录
bin
boot
dev
etc
home 存放所有用户文件的根目录
lib
mnt
opt
proc
root
sbin
tmp
usr
var
存放跟文件系统中的程序运行所需要的共享库及内核模块
系统管理员安装临时文件系统的安装点
额外安装的可选应用程序包所放置的位置
虚拟文件系统,存放当前内存的映射
超级用户目录
存放二进制可执行文件,只有 root 才能访问
用于存放各种临时文件
用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录
用于存放运行时需要改变数据的文件
1.5 准备工作与事项
至少两台机器,这里描述两台机器的配置环境,是在虚拟机 VMware Workstation Pro
上面安装两个 CentOS-7-x86_64-Minimal-1810.iso 操作系统。
注意事项:其中 Gitlab、Registry、Jenkins 都安装在 node1 机器上面,也就是 node1 作
为主机(master),node2 作为 slave(从机或副机),机器名起有意义或能区分即可,推荐
起 master 和 slave,这里就不作过多的阐述,为了避免看文档有疑问,请看清单列表.
机器名称
node1(master)
node2(slave)
机器分配 IP
192.168.1.235
192.168.1.236
机器分配内存
3G
3G
1 核
1 核
处理器
硬盘
20G
20G
虚拟机设置事项
2、Docker 基础知识
2.1、Docker 理念与出现原因
2.1.1 Docker 理念
Docker 的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组
件的封装、分发、部署、运行等生命周期的管理,使用户的 APP(可以是一个 WEB 应
用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,
namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统
层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容
器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的
libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。
为了解决运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚
拟化技术
2.1.2 Docker 为什么出现
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之
间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是
各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验
Docker 之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根
本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制
过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的
二进制字节码等(java 为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整
的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的
全部配置文件、所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。Docker
镜像的设计,使得 Docker 得以打破过去「程序即应用」的观念。透过镜像(images)将作
业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平
台间的无缝接轨运作。
2.2、为什么说“一次构建,到处运行”
2.2.1 更快的应用交付和部署
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配
置文档进行繁杂的配置才能正常运行。Docker 化之后只需要交付少量容器镜像文件,
在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部
署配置和测试验证时间。
2.2.2 更便捷的升级和扩缩容
随着微服务架构和 Docker 的发展,大量的应用会通过微服务方式架构,应用的开发构
建将变成搭乐高积木一样,每个 Docker 容器将变成一块“积木”,应用的升级将变得
非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩
容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。
2.2.3 更简单的系统运维
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会
将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一
致性给应用带来影响,产生新的 BUG。当出现程序异常时,也可以通过测试环境的相
同容器进行快速定位和修复。
2.2.4 更高效的技术资源利用
Docker 是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的 Hypervisor 支持,所
以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的 CPU 和内存的