CI/CD持续集成与持续交付(三)自动化构建docker镜像

一、项目描述

我们接下来要做的是在jenkins端写好代码,用Dockerfile文件直接构建镜像。此时整合的逻辑大致为:用户把代码通过git提交push到gitlab上,然后gitlab触发jenkins的webhook,通知jenkins做构建。

即整体流程为 :在server3 gitlab服务器上编写dockerfile,然后push到gitlab仓库,再经过gitlab触发jenkins,jenkins主机从server1 harbor仓库中拉取镜像,从而实现自动构建docker镜像,并将构建的镜像推送到harbor仓库。

主机名称IP地址功能
server3172.25.254.3作为gitlab服务器
server4172.25.254.4作为jenkins服务器
server1172.25.254.1harbor仓库
server5172.25.254.5完成拉取镜像并运行

二、自动化构建镜像并运行

2.1 项目构建----手动触发

现在我们要做的是让jenkins来做真正的构建镜像。

安装插件

首先我们先进入jenkins的插件管理:

安装此插件,此插件可以构建dockerfile项目,并且将其上传到docker仓库中。现在进入jenkins项目中的配置---> 构建: 

由于我们要在jenkins主机上推送镜像到docker仓库,所以我们要在server4上安装docker-ce。

配置yum源

先将之前的阿里云的yum源copy给server4:

 使用docker会有网桥问题,将之前server1上的网桥配置文件copy到server4上:

使之生效:

 

想要让server4连接server1上的harbor仓库:

添加解析

添加访问仓库的证书

给server4设置阿里云加速器:

 

至此,本机的docker引擎就到位了。

jenkins项目设置

接下来我们就在web上jenkins项目配置里操作了:

套接字文件更改权限

由于我们使用jenkins用户身份运行docker的,所以必须更改用户权限

更改完毕进行测试,由于之前Dockerfile已经创建好了: 

手动构建

 直接在jenkins中进行手动构建:

可以看到已经有了第四次构建,在控制台输出中也可以看见整个的拉取流程:

 在server4 jenkins主机上也能看到我们创建的镜像:

 数据存储在下面的位置:

同时,jenkins会把镜像推送到harbor仓库 library/jenkins-server(这是我们在刚刚插件中的设置完成的),这是我们刚刚自己设置的仓库位置:

2.2 项目构建----mytest项目构建成功时触发

现在我们再作一次jenkins+harbor 联动的、完整的来构建一次

新建项目

我们先新建一个docker项目:

 

构建触发器

 执行shell脚本运行docker

 构建此项目报错,是因为我们没有配置私有仓库,找不到镜像:

 指定仓库拉取

 运行成功:

可以看到容器已经在jenkins主机server4上运行起来了:

由于我们做了端口映射,可以直接在浏览器上访问:

以上我们完成了使用gitlab源码进行构建,构建完成之后推送到仓库,然后再次触发另外一个项目----从仓库里把之前推送到仓库的镜像拉下来,然后运行容器测试能不能跑。 

以上虽然成功构建了,但是我们依然是先手动触发构建镜像的mytest项目,然后mytest项目构建完成后触发运行mytest构建镜像的项目docker_project。接下来我们完整的来一次从gitlab项目变更主动触发开始。

gitlab项目变更主动触发

此时我们在server3 gitlab主机上变更一下发布文件:

 提交更改并推送:

在gitlab上已变更:

它会主动触发jenkins里mytest项目使其再次构建:

 在server4上可以看到第五次构建推送过来的镜像:

在harbor仓库中也再次上传了镜像:

但是在jenkins中,负责运行刚刚上传的镜像的docker_project 报错了:

 这是由于我们在server4上已经有之前的同名的容器在运行了,此时我们就要更改一下shell命令:

 我们再来更改一下gitlab中的index文件:

现在我们直接看jenkins:

构建成功。然后我们再看web页面:

发布页面也已经更改成功。这样就可以实现开发人员更改文件后只需要往gitlab上推送新版本即可,后台jenkins+harbor自动保存镜像和运行容器。 

具体的流程为:用户git push推送到gitlab,此时触发jenkins,jenkins开始构建和推送镜像到harbor仓库,此部分是mytest项目,jenkins等待mytest项目稳定构建之后,触发另外一个项目 docker-project,此项目功能是拉取刚刚推送的新镜像并docker run 运行容器。

三、分布式构建CI/CD系统----分离拉取镜像并运行容器任务

在生产环境环境中,我们肯定不可能将所有任务都放到一台jenkins主机上,比如构建推送镜像和拉取镜像并运行容器就应该是两台主机。所以我们再开一台虚拟机server5:

我们准备将交付发布测试即拉取运行容器任务分离出来放在server5上:

3.1 server5环境配置

安装docker引擎

 

 配置私有仓库

DNS解析

3.2 jenkins设置

jenkins上安装插件

添加全局凭证

  

 系统配置(别忘了保存)

 进入docker_project 的配置中:

测试: 

 进入server3 gitlab主机更改推送:

jenkins 两个项目都推送成功:

 

以上我们就完成了 在jenkins主机上进行镜像构建,在另一台主机server5上进行镜像拉取和运行,降低了jenkins主机的压力。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值