Jenkins与Docker的自动化CI/CD实战

一、发布流程设计

Jenkins与Docker的自动化CI/CD实战

Jenkins与Docker的自动化CI/CD实战

工作流程:

 

Jenkins与Docker的自动化CI/CD实战

二、环境规划:

 

Jenkins与Docker的自动化CI/CD实战

三、 部署过程

1,部署git

如果公司内部有直接克隆就可以

 

Jenkins与Docker的自动化CI/CD实战

2,部署Jenkins环境

部署传送门:Jenkins+Maven+Svn实现代码自动打包与发布

Jenkins与Docker的自动化CI/CD实战

3,部署私有镜像仓库

注意:docker 仓库 由于https 认证,所有需要pull的客户端,需要修改配置文件

 

Jenkins与Docker的自动化CI/CD实战

4,所有主机安装docker

1)安装依赖包

 

Jenkins与Docker的自动化CI/CD实战

2)添加Docker软件包源:

 

Jenkins与Docker的自动化CI/CD实战

3)安装Docker CE

 

Jenkins与Docker的自动化CI/CD实战

4)配置加速器

 

Jenkins与Docker的自动化CI/CD实战

5)启动并开机启动

 

Jenkins与Docker的自动化CI/CD实战

四、构建基础镜像

【Apache、Nginx、Tomcat、LNMP、LAMP、LNTP】

JAVA程序必须有JDK环境才可以运行,为了减少镜像大小及提高性能,这里直接把JDK放到宿主机上,容器以挂载形式使用。

1,安装jdk

 

Jenkins与Docker的自动化CI/CD实战

2,拟写Dockerfile

 

Jenkins与Docker的自动化CI/CD实战

3,构建镜像

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

4,上传到docker 镜像仓库

 

Jenkins与Docker的自动化CI/CD实战

5,启动镜像 测试

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

五、Jenkins 配置

1.主页面 -> 系统管理 -> 全局工具配置

指定JDK、Maven路径,Git保持默认:

Jenkins与Docker的自动化CI/CD实战

2.jenkins安装必要插件

主页面 -> 系统管理 ->管理插件:

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

3,配置SSH插件

第一步:先创建一个用于连接Docker主机的凭证 (有权限的用户)

主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:

Jenkins与Docker的自动化CI/CD实战

输入连接Docker主机的用户名和密码:

Jenkins与Docker的自动化CI/CD实战

第二步:添加SSH远程主机

主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:

Jenkins与Docker的自动化CI/CD实战

问题:当以普通用户身份去使用docker images时,出现以下错误:

Jenkins与Docker的自动化CI/CD实战

六、将从github上下载的JAVA项目,上传到自己的gitlab仓库

 

Jenkins与Docker的自动化CI/CD实战

登陆gitlab查看solo项目:

Jenkins与Docker的自动化CI/CD实战

七、Jenkins创建项目并发布测试

1.主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目:

Jenkins与Docker的自动化CI/CD实战

注意:如果没有显示“构建一个Maven项目”选项,需要在管理插件里安装“Maven Integration plugin”插件。

配置Git参数化构建:

Jenkins与Docker的自动化CI/CD实战

2.动态获取Git仓库tag,与用户交互选择Tag发布:【也可以设置分支】

Jenkins与Docker的自动化CI/CD实战

3.指定项目Git仓库地址:

Jenkins与Docker的自动化CI/CD实战

修改*/master为$Tag,Tag是上面动态获取的变量名,表示根据用户选择打代码版本。

4.设置maven构建命令选项:

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

利用pom.xml文件构建项目。

在Jenkins本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker主机使用推送的镜像创建容器:

Jenkins与Docker的自动化CI/CD实战

上图中 命令内容如下:

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

上图中Command 内容如下:

 

Jenkins与Docker的自动化CI/CD实战

注:容器名称blog-solo,暴露宿主机端口8080,即使用宿主机IP 192.168.56.12:8080 访问blog-solo项目。

blog-solo项目已配置完成,开始构建:

选择tag,开始构建:

Jenkins与Docker的自动化CI/CD实战

Jenkins与Docker的自动化CI/CD实战

点击左下角构建历史里,右击第一个查看控制台输出:

Jenkins与Docker的自动化CI/CD实战

构建详细内容

Jenkins与Docker的自动化CI/CD实战

构建成功

访问:192.168.56.12:8080 查看部署结果

Jenkins与Docker的自动化CI/CD实战

调整项目访问地址

进入容器,切换到项目目录

 

Jenkins与Docker的自动化CI/CD实战

调整后,重启tomcat,再次验证,OK,结果如下:

Jenkins与Docker的自动化CI/CD实战

至此,自动化CI环境搭建完成,你可以模拟提交代码并打tag测试自动化发布流程。

八、问题总结:

查看docker.sock权限

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

解决方法:【免sudo 使用docker images 】

 

Jenkins与Docker的自动化CI/CD实战

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:744677563

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

一、发布流程设计

Jenkins与Docker的自动化CI/CD实战

Jenkins与Docker的自动化CI/CD实战

工作流程:

 

Jenkins与Docker的自动化CI/CD实战

二、环境规划:

 

Jenkins与Docker的自动化CI/CD实战

三、 部署过程

1,部署git

如果公司内部有直接克隆就可以

 

Jenkins与Docker的自动化CI/CD实战

2,部署Jenkins环境

部署传送门:Jenkins+Maven+Svn实现代码自动打包与发布

Jenkins与Docker的自动化CI/CD实战

3,部署私有镜像仓库

注意:docker 仓库 由于https 认证,所有需要pull的客户端,需要修改配置文件

 

Jenkins与Docker的自动化CI/CD实战

4,所有主机安装docker

1)安装依赖包

 

Jenkins与Docker的自动化CI/CD实战

2)添加Docker软件包源:

 

Jenkins与Docker的自动化CI/CD实战

3)安装Docker CE

 

Jenkins与Docker的自动化CI/CD实战

4)配置加速器

 

Jenkins与Docker的自动化CI/CD实战

5)启动并开机启动

 

Jenkins与Docker的自动化CI/CD实战

四、构建基础镜像

【Apache、Nginx、Tomcat、LNMP、LAMP、LNTP】

JAVA程序必须有JDK环境才可以运行,为了减少镜像大小及提高性能,这里直接把JDK放到宿主机上,容器以挂载形式使用。

1,安装jdk

 

Jenkins与Docker的自动化CI/CD实战

2,拟写Dockerfile

 

Jenkins与Docker的自动化CI/CD实战

3,构建镜像

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

4,上传到docker 镜像仓库

 

Jenkins与Docker的自动化CI/CD实战

5,启动镜像 测试

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

五、Jenkins 配置

1.主页面 -> 系统管理 -> 全局工具配置

指定JDK、Maven路径,Git保持默认:

Jenkins与Docker的自动化CI/CD实战

2.jenkins安装必要插件

主页面 -> 系统管理 ->管理插件:

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

3,配置SSH插件

第一步:先创建一个用于连接Docker主机的凭证 (有权限的用户)

主页面 -> 凭据 -> 系统 -> 右击全局凭据 -> 添加凭据:

Jenkins与Docker的自动化CI/CD实战

输入连接Docker主机的用户名和密码:

Jenkins与Docker的自动化CI/CD实战

第二步:添加SSH远程主机

主页面 -> 系统管理 -> 系统设置 -> SSH remote hosts:

Jenkins与Docker的自动化CI/CD实战

问题:当以普通用户身份去使用docker images时,出现以下错误:

Jenkins与Docker的自动化CI/CD实战

六、将从github上下载的JAVA项目,上传到自己的gitlab仓库

 

Jenkins与Docker的自动化CI/CD实战

登陆gitlab查看solo项目:

Jenkins与Docker的自动化CI/CD实战

七、Jenkins创建项目并发布测试

1.主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目:

Jenkins与Docker的自动化CI/CD实战

注意:如果没有显示“构建一个Maven项目”选项,需要在管理插件里安装“Maven Integration plugin”插件。

配置Git参数化构建:

Jenkins与Docker的自动化CI/CD实战

2.动态获取Git仓库tag,与用户交互选择Tag发布:【也可以设置分支】

Jenkins与Docker的自动化CI/CD实战

3.指定项目Git仓库地址:

Jenkins与Docker的自动化CI/CD实战

修改*/master为$Tag,Tag是上面动态获取的变量名,表示根据用户选择打代码版本。

4.设置maven构建命令选项:

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

利用pom.xml文件构建项目。

在Jenkins本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker主机使用推送的镜像创建容器:

Jenkins与Docker的自动化CI/CD实战

上图中 命令内容如下:

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

上图中Command 内容如下:

 

Jenkins与Docker的自动化CI/CD实战

注:容器名称blog-solo,暴露宿主机端口8080,即使用宿主机IP 192.168.56.12:8080 访问blog-solo项目。

blog-solo项目已配置完成,开始构建:

选择tag,开始构建:

Jenkins与Docker的自动化CI/CD实战

Jenkins与Docker的自动化CI/CD实战

点击左下角构建历史里,右击第一个查看控制台输出:

Jenkins与Docker的自动化CI/CD实战

构建详细内容

Jenkins与Docker的自动化CI/CD实战

构建成功

访问:192.168.56.12:8080 查看部署结果

Jenkins与Docker的自动化CI/CD实战

调整项目访问地址

进入容器,切换到项目目录

 

Jenkins与Docker的自动化CI/CD实战

调整后,重启tomcat,再次验证,OK,结果如下:

Jenkins与Docker的自动化CI/CD实战

至此,自动化CI环境搭建完成,你可以模拟提交代码并打tag测试自动化发布流程。

八、问题总结:

查看docker.sock权限

 

Jenkins与Docker的自动化CI/CD实战

 

Jenkins与Docker的自动化CI/CD实战

解决方法:【免sudo 使用docker images 】

 

Jenkins与Docker的自动化CI/CD实战

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:744677563

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!