您的位置:首页 > 运维架构 > Docker

【元宵特奉】DevOps微课 | 基于Jenkins+docker实现一键式部署

2018-03-02 00:00 976 查看
点击上方“中兴开发者社区”,关注我们每天读一篇一线开发者原创好文

【摘要】本实践介绍了利用Jenkins 和docker技术,如何实现CI/CD的各环节的步骤,包括环境准备,代码提交,编译程序,构建镜像,部署,测试。一套完整的流程,和今日元宵佳节的圆月甚是应景,希望大家能有所收获。【关键词】Docker、镜像、Jenkins、持续集成、自动化部署、CI、CD、ESM【类别】软件的小分类:架构相关研发支持的小分类:软件设计

技术背景

术语介绍:ESM: 企业服务管理系统Rancher: 容器管理和服务编排工具Compose: 服务编排

问题提出

一个全新的系统,开发测试所需要处理的事情大概有:申请测试机器、编码实现、部署测试、集成等,而其中申请测试机器和部署测试是两个最耗时且低技术含量的操作。那如何简化整个流程,使开发人员一提交代码后,就能快速将应用部署到一台服务器上,以提高项目的开发效率?测试环境和正式环境,由于两者环境的不同,比如操作系统、中间件版本、环境变量、安装路径等等,导致泄露到正式环境的bug通常是由于这种原因引起,那如何尽可能保证这两个环境的一致性,以提高项目的质量?

解决思路

基于docker容器技术的自动化部署就是福音。不需要申请测试机器,可以在云端自动生成构建机,在构建机里自动生成应用包,再在docker主机上将生成的应用包构建成镜像,然后在云平台中启动容器即可。整个流程需要用到如下的工具:git:源代码版本管理工具DevOps:提供的pipline工具,通过pipline规范整个构建和部署的各个阶段Jenkins:自动构建任务,通过任务生成对应的镜像文件和war包制品库:保存对应的制品,如war包,jar等 镜像库:存放镜像的仓库Esm:企业服务管理系统,包含容器的部署,运行,监控。 主体流程图:

用Jenkins来做节点控制、版本管理、流程设置、触发Job,用Docker容器来搭建编译部署环境。把这一切连接起来的就是流程脚本和Dockerfile。

实践情况

1. 环境准备1) 申请如下环境所需的账号和权限
云CI环境
 制品库环境
代码评审环境
 Devops环境
 用来构建war包的镜像库
2) 搭建构建应用镜像的主机环境(各项目组自己提供)生成应用镜像的docker主机
必须满足如下条件:
redhat-7.2; 安装docker1.9.1以上;安装git;安装 Jenkins slave端(后面会介绍此节)。
搭建用来运行容器的docker主机(各项目组自己提供)
环境要求:  redhat 7.2; 安装docker1.9.1以上;此主机用来挂在 esm环境上。 项目组将此主机的ip地址等信息发给 XXX项目组,以便将此主机添加到esm的环境中。3) 本实践还涉及到的其它环境 ESM测试环境 
 ESM 正式环境 
应用镜像库环境 
 Gitlab正式环境 
Gitlab测试环境 
2. 在docker主机上制作构建基础镜像编写dockerfile
由于各个项目组的构建的环境都不一样,因此需要由项目组制作一个自己的构建基础镜像。其中,xx项目中构建的基础镜像为xxbuildmodel:v2.0生成构建镜像Push镜像到docker镜像库3. jenkins任务配置总体分为a”开发环境的任务” 和 b”生产环境环境”的任务。1) 开发环境将按步骤新建如下的jenkins任务:个人构建
 代码评审
 项目构建
 项目部署
 自动化测试
2) 生产环境将按如下步骤建立jenkins任务: 生成镜像
 停止服务
项目部署
如下为以xx为例的基于开发环境的jenkins任务总图:

如下是基于生产环境的jenkins的任务总图:


a. 开发环境个人构建:通过代码提交触发(代码提交比较频繁的代码流,可以采用定时触发的方式进行),目的是确定构建的成功性,在jenkins上配置个人构建任务需要注意如下几点:
任务运行机器,由于是云CI,这里需要限制任务只在mesos上执行,mesos是默认的挂载在jenkins的节点,mesos上有对应的docker环境,能够创建镜像、上传镜像和上传制品库。
 Git依赖库,代码在git上对应的ssh地址,以及认证
执行构建脚本
代码评审:代码提交后,代码经过评审,评审通过后才能并入主分支。包含如下: 代码提交: 代码通过开发人员提交到git
代码评审:登录gerrit,my->changes,查看产生的评审单,然后进行打分。
项目构建:整体逻辑与个人构建相似,区别在于项目构建有产出,会输出对应的构建war包。定时触发或者是代码评审通过后触发,拉取最新主分支的代码,实现主分支上的编译打包,应用包再上传到对应制品库。 任务运行机器:同个人构建
 Git库:个人构建对比,构建的流改成master
 构建环境:需要申请对应的制品库空间,对应的申请流程可以访问wiki,填写申请信息,提交即可
 执行构建脚本:同个人构建执行构建脚本
项目部署:从制品库中拉取对应的war包,运行dockerfile文件生成对应的镜像包,并且部署到esm系统,具体分为测试环境项目部署 和 正式环境项目部署。任务运行机器:xx项目自己对应的docker主机,为环境准备 e) 中所对应的主机。
此主机可以在jenkins-->nodes路径,如下界面进行添加(在docker主机上安装jenkins slave端)(补充说明:如以后镜像库使用中开社的镜像库,则此docker主机也可以使用云CI中的主机)Git库:和源代码的git是区分出来的,这里只配置配置项的git库。
执行shell脚本
自动化测试:根据项目部署的esm环境,获取系统的url,运行测试脚本,实现自动化测试获取测试结果,大概的部署过程同上面的各个过程,需要注意的是由于现在云测试资源的问题,无法申请到对应资源,当前都是通过挂载节点的形式来运行测试脚本,测试部署在esm上的服务。b. 生产环境生产环境比测试环境简单得多,主要是对镜像重新打标签,然后部署到ESM的生产环境。生成镜像:主要是生成生产环境的配置文件镜像,对在开发环境生成的应用镜像重新打标签。停止服务:停止部署在esm里面容器的服务。项目部署:将应用部署到生产环境。
4. 搭建pipline流水线1) 登录http://dxx.xxx.com.cn/devops/ 创建项目 注意:pipeline创建了项目目前必须通知pipeline项目组重启服务,否则无法触发流水线,后续修复。2) 设置-功能设置 设置gerrit的代码路径

3) 设置-工作流-环境,设置云CI路径


4)点击新增工作流,设计新的流水线工作


实践中可以分为测试环境的流水线 和 正式环境的流水线。如下图为测试环境的流水线:


这里分为两个流水线,上面并行的为个人构建,通过代码提交构建,另外是定时部署。

效果评价

本实践讲述了目前IT应用在自动化构建部署中出现的问题,描述了在基于Jenkins 和 docker容器技术下,如何搭建自动化构建环境的步骤。解决了在搭建过程中出现的若干常见问题,将为各项目组的DevOps自动化提供指导和参考意义。正式环境的结果:


推广建议

 适用的产品/项目:能容器化运行的应用,如java应用等;
 需要的人员投入和培训情况:根据模板能编写简单的dockerfile,compose文件;
 推广过程中需要防范的问题:要严格遵守标准规范编写dockerfile和compose文件。
个人经验总结:采用此种集成部署方式,实现DevOps自动化,可以大大提高生产效率和产品质量。 参考资料[1] http://docs.docker.com/[2] http://docs.docker.com/installation/#installation[3] https://www.docker.com/tryit/#[4]<<快速搭建基于docker容器技术的PaaS运行环境的方法-xxx.doc>>[5]<< IT云平台技术标准.docx>>[6] http://dev.xxx.com.cn/topic/#/27387[b]
[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: