DevOps 最直观的一个价值就是自动化,自动化构建、自动化测试、自动化部署等等。自动化的价值自然是很清晰的,但目前的自动化还是各种工具、各种平台、各种语言独立在走自动化之路。比如,公司里的 Java 项目和 Node 项目,由于其私服都是各自搭建的,仓库也是各个团队在维护,自然各个团队直接都是烟囱式的结构。这种结构的问题在于很多协作变得不可能,比如 Java 项目团队将仓库分为了开发库、测试库和发布库,制定了一套机制很好地实现了发布流程自动化的机制,但其他项目还是得重新去构建自己的流程和规范。
未来的趋势肯定是一个仓库包含所有的语言类型,比如 Java、Node、Python 等等开发语言,统一提供高可用、负载均衡和容灾备份等问题,那么这些仓库都适用同一套自动化规则。DevOps 一个很重要的标准就是可度量,只有在流程统一的情况下才方便去持续度量,然后发现问题从而持续改进。
DevOps强调了基础设施变更和软件交付过程的自动化,以及在软件的开发、测试、运维的全过程中,开发人员和运维人员之间的沟通与合作。其核心价值在于能够让研发团队更多的关注软件业务的改进和提升,并快速的交付软件产品,以响应市场的变化。伴随着客户IT系统规模的扩大,维护的工作量也在快速增长,华讯网络打造的DevOps方案,帮助客户实现基础设施变更和软件交付过程的自动化,将构建、测试、发布软件变得更加地快捷、频繁和可靠。
凡是关注应用程序发布自动化(ARA)、应用程序发布编排(ARO)、持续集成/持续交付(CI/CD)、PaaS、Serverless、微服务和编排工具等市场的人都意识到,即将出现一场碰撞,会颠覆诸多市场,直至颠覆这些市场的基本定义。一切的发展趋势是,使公司企业能够更快速、更可靠地为客户交付应用程序功能。
作为Amazon在其自身的DevOps实践中逐步建立起来的AWS,自然对DevOps提供了全面的支持。如图展示了AWS为DevOps提供的服务工具和对应的DevOps最佳实践环节,可以看到,AWS服务完全可以覆盖DevOps的整个过程。
借助DevOps我们可以实现企业环境的部署、流程管理、配置管理、持续集成和持续部署、开发测试质量、运维监控等各服务。
级别 |
环境和部署 |
流程管理 |
配置管理 |
持续部署、持续集成 |
开发测试质量 |
运维监控和度量 |
原始阶段 |
纯手工过程部署软件系统、配置环境,不能频繁部署、过程不可靠 | 流程流转靠人的经验管理来完成 | 部分文件使用版本控制,签入代码不频繁 | 纯手工方式构建,缺少管理和报告 | 手工测试 | 人工监控为主,自动监控为辅 |
基础阶段 |
自动化部署到某些环境,创建一套新环境比较简单快捷,过程相对可靠 | 需求、开发、运维之间交换有规范、不存在信息遗漏 | 所有构建软件系统所需的东西都纳入版本控制,包括源代码、配置、构建脚本、部署构建、数据脚本等 | 定时或人工触发自动化构建 | 部分自动化测试 | 监控作为常态化运维保障工作,故障发生时通过邮件、短信等方式及时通知 |
可持续阶段 | 全自动化、提供自助服务式的部署方式,每个环境的部署都共用同一个过程 | 各个环境流程管理是闭环,并在平台中管理,环节之间流转具备自动化能力 | 库和依赖也被管理起来 | 每次变更提交都会触发自动化构建和测试 | 自动化单元、接口、UAT测试 | 有统一的监控平台,并能对监控数据进行分析和异常定位 |
成熟阶段 |
完全自动化,实现端到端的交付 | 从平台上可以看到整个过程的信息 | 频繁签入代码,开发人员每天至少签入一次代码到主分支 | 收集构建度量及测试结果数据,并进行可视化分析和展示 | 质量度量和趋势跟踪,自动化测试可以覆盖的都采用自动化测试 | 所有系统都纳入统一监控平台,开发运维可通过监控平台提升系统可靠性管理 |
优化阶段 |
所有资源和环境都会高效的管理起来,自动化地配置管理,提供统一的PaaS服务平台提供虚拟化、容器化的资源 | 团队从需求、开发、测试、部署、运维,所有工具和管理都在一个平台,可管理、可流转、可追溯 | 支持高效的协作、快速开发、可审计的变更管理流程 | 持续改进流程,优化反馈机制,提高透明度 | 几乎没有生产回退、缺陷能及时发现和修复 | 系统监控和业务反馈及时,快速进行优化提升 |
今天我们主要谈谈如何在DevOps中实现持续集成和持续部署,该服务可以用“流水线”来形容整个过程。可以用如下图来表示整个流程。
Devops流水线部署的工具链中的持续集成(Continuous Integration,CI)
- 定义:频繁地将代码集成到主分支。
- 工具:版本控制系统,CI 工具等
- 流程:
- 1. 持续集成服务器得到新提交的通知或者定期检查是否有新提交
- 2.在检测到新的提交时,持续集成服务器运行构建脚本
- 3. 构建成功,则持续集成服务器运行自动化测试;若构建失败,则同一分之上的其他提交也无法构建,因此需要及时的解决构建的问题
- 4.持续集成服务器把器运行结果提供给相关责任人
每天都会有大量的开发人员需要将代码合并到主分支,这时候就需要一个合适的工具来做版本控制,常用的版本控制工具有GitHub、GitLab、BitBucket、SubVersion等,关于这些工具的选择,没有一个绝对的天平,Dev可以根据团队情况选择合适的工具以加快整体效率与质量。
相较于传统集中式管理的SVN,Git属于典型的分布式管理。Git中每个克隆(clone)的版本库都是平等的,Dev可以从任何一个版本库的克隆来创建属于您自己的版本库,而SVN只能从中央仓库获取到代码。
- Git提交完全在本地完成,无须别人给你授权,SVN则需要再服务器上开放上传权限。当然,Git如果需要把代码合到别人的仓库,任然需要发起一个PR,获得别人的同意后,才能合并。
- Git分支切换特别的快,因为他只是切换头指针,而不是重新拉取整个分支的代码
- Git的版本号则更进一步,版本号是全球唯一的;SVN则维护一个全局版本号,并且版本号是连续的,可以预判下一个版本号
- Git的内容完整性要优于SVN。
随着IT与互联网技术的发展,市面上越来越多的持续集成工具让产品可以快速迭代,同时还能保持高质量。
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
GitLab CI:GitLab托管在GitLab.com上,GitLab.com提供了免费的托管服务,并且提供了git仓库存储和管理功能,如访问控制,问题跟踪,代码评论等。GitLab CI能与GitLab完全集成,可以通过使用GitLab API轻松地作为项目的钩子,当代码集成完成后,立即触发开始下一阶段的任务。
Travis CI:侧重于托管的工具,对于GitHub上托管的开源项目的构建几乎都是免费的,它通过.travis.yml文件进行配置,并且支持多种语言。
持续部署(Continuous Deployment,CD)
- 定义:代码通过评审以后,自动部署到生产环境。
- 工具:Aws ECS/ECR , CloudFormation
- 部署总体目标:对用户产生最小影响(服务延迟/中断等)的情况下,将服务的升级版本投入到生产环境中。
实例:aws中的A/B测试部署:在生产环境中部署服务的两个不同版本,可能是新旧版本共存,或者两个新版本共存,要么呈现了不同的用户界面,要么呈现了不同的行为,测试用户的偏好。如果某个版本在业务量上(比如访问量等)呈现出更好的行为,那么整个版本就成为发布版本,另一个版本则作废。
特点:A,B数目相同
- 1为A服务用户的请求流向
- 2为B服务用户的请求流向
部署工具的选择,企业IT仍然可以选择适合团队协同作战的工具用以提高企业生产率与工作效率。这里笔者要说的是AWS平台的部署工具ECS/ECR 与Docker。
Docke,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。Docker作为一个image的存在,需要一些VM或者PC来支撑的它的运行,我们通常会通过Docker的镜像中心来获取一些已经打包好的镜像,拉到本地运行,或者自己打包一个docker镜像,托管至Docker镜像中心。对于AWS来说,也提供了一个Docker的存储仓库(ECR)以及部署(ECS)的环境,我们可以在本地把做好的Docker镜像托管至AWS的存储仓库ECR,然后定义一系列的Task将这些服务发布到ECS上去。
借助AWS 云原生CodePipeline可帮助您实现软件发布流程的自动化,从而使您能够向用户快速发布新功能。凭借 CodePipeline,您可以快速迭代反馈并将新功能更快地交付给客户。
自动化构建、测试和发布过程可使您轻松测试每次代码更改并捕获易于修复的小型漏洞。您可以针对每一项更改运行调试和发布流程,从而保证应用程序或基础设施代码的质量。
借助AWS 云原生 CodeDeploy 可实现软件部署的完全自动化,使您能够快速可靠地部署。无论是部署到 Amazon EC2、AWS Fargate、AWS Lambda 还是本地服务器,您都可以在开发、测试和生产环境中持续部署应用程序。服务根据您的基础设施进行扩展。
有助于最大限度地提高软件部署流程期间的应用程序可用性。它会逐步引入更改,并根据可配置规则跟踪应用程序运行状况。即使出错,您也可以轻松停止和回滚软件部署。
WS CodeDeploy 是一项独立于平台和语言的服务,可与任何应用程序协同工作,不管您是部署到 Amazon EC2、AWS Fargate 还是 AWS Lambda,均可提供相同的体验。您可以轻松重用现有的设置代码。CodeDeploy 还能与您现有的软件发布过程或持续交付工具链(例如 AWS CodePipeline、GitHub、Jenkins)集成。
贝斯平作为AWS高级服务合作伙伴以及认证的MSP合作伙伴,持续不断的践行DevOps服务与理念,不断探索DevOps持续集成和持续部署,带给客户更多云的价值,以充分拓展企业业务。