深度解析:持续交付将如何拯救IT运维?
*本篇纯技术干货8000字,阅读预计15~20分钟, 很考验阅读者的功力!
A 是一个传统行业的公司,物流运输为主营业务,IT部门作为支撑部门辅助业务发展。但是随着业务的快速发展,IT 部门开始感觉到有点力不从心了:
A 公司遇到的问题,相信很多传统企业都会有同样的困扰。其实,知道问题在哪里,就是最好的开始,我把帮助类似A公司解决这些问题的方案整理出来,希望对大家有所帮助。
试想一下,如果是一百套不同的系统,自动化平台根本做不起来,业务维护、交接和部署的成本简直不可想象。
实际环境中,部署模式分为2种,一种是可变部署模式,一种是不可变部署模式。
是指任何的版本变更操作,都会在原来的版本上进行,例如升级、回滚、卸载、安装,这些变更操作会直接影响到原来的版本的服务,技术术语中把使用了可变部署模式的服务器称之为:Mutable Monster Server(随之时间推移逐渐变成不可控的怪物服务器)。
不可变部署模式,和可变部署模式相反,一旦当前的版本发布后,就不能再对该版本做任何的操作,如果要进行版本变更操作,就需要重新发布一个新的不可变版本,这些变更操作不会影响原来的版本的服务,不可变部署模式的目前代表是 Docker 镜像发布模式。
结合 X 轴,可以得到以下需要标准化的实体/属性表:
持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。
从这个定义,我们可以理解到持续集成的关键思想:
例如,常见场景有JenkinsServer和Gitlab的组合搭配,后面我再演示给大家看。^_^
这就是CI的反馈能力,帮助研发同学找到bugs,保证版本质量。
其中,Jenkins 是 CI 的主流工具,它的前身是 Hudson,我这里选用 Jenkins 为大家演示案例。
首先要给大家介绍一下在 Jenkins 中的专业名词:
如果想Jenkins只保留一定数量的构建历史,那么勾选“丢弃旧的构建”进行选择:
多个任务之间可以互相触发,串联执行构建,称之为上下游,对上下游的任务进行构建控制:
2. 推荐使用 Git-Flow的代码管理,只需要对Develop分支和Master分支做持续集成,可以很方便地做较长版本发布周期的项目、持续集成和随时发布;
如果 Jenkins 服务器没有联网,还手动下载插件的.hpi安装文件,然后在“系统管理”-“管理插件”-“高级”中上传插件进行手动的安装,安装时注意自己解决依赖。^_^
2. Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
2. Build when a change is pushed to GitLab:当前项目是 GitLab 项目时,可以勾选次构建,当产生 Push 操作时,可以定制 GitLab 上的事情,由 GitLab 来触发自动构建;
3. 通过Remote HTTP API 来触发当前任务的构建:由通过任意的方式,使用 HTTP请求JenkinsAPI接口,可以触发当前任务PROJECTNAME的构建:http://YOURHOST/jenkins/job/PROJECTNAME/build
这是给用户自由定制触发条件和场合使用的。
在这里,我给大家演示一下 Maven 项目的构建( mvn package 指令会经历 compile、test 等关键周期,因此编译、单元测试均均会运行):
2. Run only if build succeeds or is unstable
3. Run regardless of build result
部署生产环境的能力和部署开发联调环境、测试验证环境一样,但是我们通常做不到生产环境的自动化部署,原因有很多:
在很多传统企业的场景下,就算我们做不到持续部署,对开发联调环境和测试验证环境的持续集成的实践已经是非常巨大的进步了。持续部署示例如下(多环节部署、回滚、灰度、升级、调度编排等等):
通过监控平台和日志平台的数据分析反馈,我们得到产品的程序性能跟踪、运营的数据分析,这些都可以反馈到提升业务价值上,最终实现了持续交付。
以上提到的在实现持续交付时所需的平台功能,鹿厂优维科技会在新发布的EASYOPS社区版中陆续开放,用户可以终身免费使用,助大家早日实现 IT 运营!
微信群:EasyOps行业交流6群