Docker结合Jenkins的持续构建实践
docker和Jenkins不是什么新东西了,两者结合也不是什么稀奇的事情,也已经有很多Jenkins和docker相结合的文章,此文仅为自己的一点心得实践,如有不对的地方,欢迎大家纠正。
先贴上大致的流程图,逐步说明:
代码-Git:
并没有什么好说明的,就是简单的使用了Git作为版本控制工具而已,通用使用规范不在细说。
此步的产出:
Git分支特定版本号
Git-自动构建、自动构建-代码包:
做法也很通用了,将project的Git钩子同Jenkins结合,达到特定分支有push时机触发自动构建,将代码包从Git拉取并打包为代码包。
此步产出:
打包好的代码包:project.tar.gz
代码包-Docker镜像
在此步中,我们为每个project提供特定的测试环境,并且在此环境中执行项目代码镜像打包操作。在此步中,需要提前准备几样东西:
测试环境:我们这里为一台干净的服务器(不要再问好奢侈,有钱就是任性),部署docker环境;
project的base镜像:对于一个成熟的项目,所依赖的环境是固定可知的,因此提前准备好其所依赖的base image是必要的。
如,我们一个项目的base image的Dockerfile:
FROM centos:liuyanglong
MAINTAINER liuyanglong "liuyanglong@xxxx.com"
MAINTAINER version "online"USER root
ADD php.ini /home/work/local/php/etc/
ADD php-fpm.conf /home/work/local/php/etc/ONBUILD ADD project-code.tar.gz /home/work/
ONBUILD ENTRYPOINT ["supervisord", "-c", "/etc/supervisord.conf", "-n"]
注意最下面的两行ONBUILD
而在每一次Jenkins的构建时,要做的仅仅是将代码包传入,并且执行docker build即可,此时build所使用的Dockerfile的内容只有一行:
From this_project_image:base
而执行build时只会根据base image中的两行ONBUILD执行两个命令:
ADD project-code.tar.gz /home/work/
ENTRYPOINT ["supervisord", "-c", "/etc/supervisord.conf", "-n"]
注意:此步仅仅在测试服务器做了docker build操作,并没有执行docker pull!!
镜像打包完毕后,此步并没有结束!!
调用脚本,根据此构件号的版本docker image创建对应的容器,脚本的输出为其对应的访问方式,供QA同学测试使用。
这样,每个构建好的版本都有对应的测试环境,且互不冲突!
鄙人的脚本地址为:https://github.com/Liuyanglong/docker-tools/blob/master/create_docker
此步的产出:
docker build成功的project image,如以构建号为image版本号,叫做: project_dev:530
此版本代码的测试环境地址,如:172.30.40.2
生成线上镜像
到上一步为止,测试构建环境已经结束,当QA同学确定要上线时,执行Jenkins的Promotion操作,这时触发 此步,将对应build版本对应的docker镜像推送到 私有docker registry。
所执行的操作自然为 :
docker tag project_dev:530 docker-registry.xxxxx.com/xxxxxxx/project_name:version
docker push docker-registry.xxxxx.com/xxxxxxx/project_name:version
此步产出:
push好的线上镜像
AB上线
此为最后一步,同样是执行promotion操作后最后所执行的步骤,调用我们的内部接口,对线上应用执行AB上线,具体可参见文章:http://segmentfault.com/a/1190000002978115#articleHeader6
总结
上述就是我们在生产环境中的使用Jenkins和docker所构建的持续集成&自动部署的逻辑架构。也欢迎各位大大拍砖指教。
Docker结合Jenkins的持续构建实践相关推荐
- Docker安装Jenkins实现自动化构建部署到Tomcat
安装Docker 直接装一个docker-toolbox就好了,下载最下面的最新版 http://mirrors.aliyun.com/docker-toolbox/windows/docker-to ...
- 玩转Docker实战篇!使用Docker与Jenkins进行持续集成测试,附加介绍Docker-in-Docker
一.本文目的 在前面的文章中,所有的测试例子都是本地的.围绕着单个开发者的(就是说,如何让本地开发者使用Docker来测试本地网站或者引用程序).现在来看看在多开发者的持续集成测试场景中如何使用Doc ...
- 基于K8s和docker的Jenkins 可伸缩持续集成系统
概述 本文档主要介绍Jenkins的可伸缩部署方式,一种是基于Docker(或者docker-swarm 集群)的部署方式,另外一种是基于kubernetes的部署方式. 由于基于kubernetes ...
- Jenkins+Jmeter持续集成笔记(四:定时任务和邮件通知)
通过前几篇文章,jmeter+ant+jenkins自动化持续构建的测试平台基本成型.既然要自动化平台,最基本的肯定要实现不经过人工干预,平台会在特定的条件下自动运行测试脚本,并在脚本运行结束后,发送 ...
- docker搭建jenkins
docker搭建jenkins实现持续集成.持续部署 一.搭建jenkins 1.使用docker安装jenkins 2.查看jenkins容器是否正常启动 3.查看jenkins的初始密码 4.登录 ...
- Jenkins与Docker的持续集成实践
本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...
- Jenkins Docker 持续集成实践
前言 持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成意味着更早的发现问题.通过持续集成,及时发现和解决代码故障 ...
- Jenkins 与 Docker 的持续集成实践一
2019独角兽企业重金招聘Python工程师标准>>> 持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁. ...
- 基于Docker容器的,Jenkins、GitLab构建持续集成CI
** 开发者将代码提交(push)到GitLab后,GitLab通过Hook通知jenkins,jenkins自动从GitLab中获取项目最新的源码进行集成和发布. 基于Docker,创建一个私有Gi ...
最新文章
- 利用map和stringstream数据流解题
- tdd干扰波形_LTE常见干扰排查(中国移动)
- 国际软件设计文档——概要设计说明书
- vue开发小程序Demo
- 不重复的两两比较(洛谷P5728题题解,Java语言描述)
- Linux—vim/vi 翻页跳转命令快捷键
- opencv中很有趣的仿射变换(Affine Transformation)
- jquery属性过滤选择器[attr=value]、[attr!=value]、[attr^=value]、[attr$=value]、[attr*=value]、[attr|=value]
- 将CString转换成string ...
- Power BI 数据分析可视化软件入门教程
- ROS树莓派小车暑假记录(二)
- [Win11]解决PS/2标准键盘带感叹号,笔记本键盘无法使用。代码19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个
- K3 Cloud BOS设计 增加表单按钮 修改状态
- 股票大宗交易对股价走势的影响
- python菜鸟教程官网绘图-Python Tkinter 画布(Canvas)
- 看程序员如何实力撩妹
- IOS 最新邓白氏编码申请
- word 2016图表插入题注及交叉引用
- 云计算对电子商务的应用优势
- linux 证书文件权限,Linux运维之道之admin1.4(权限和归属,LDAP认证)
热门文章
- 你必须掌握的常用正则表达式大全
- java hashmap 实现 序列化_java – Jackson JSON对象映射器反序列化为LinkedHashMap而不是HashMap...
- Perl 连接Oracle 出现OCI missing的问题及解决
- [微博]页面table 闪动问题解决
- shapenet数据集什么格式_网络中的链路层数据格式是什么样?6个知识点1张图给您说明白...
- 哈工大c语言作业系统,2015秋C语言程序设计
- RabbitMQ的web界面解析
- android背景色显示圆形,android – 如何使文本视图形状的圆形和基于条件设置不同的背景颜色...
- python for和while的用法区别_详解python while 函数及while和for的区别
- linux命令行安装vnc_centos 6.5 命令行方式可以用vnc连接吗