2019独角兽企业重金招聘Python工程师标准>>>

[toc]

持续交付(CD, Continuous delivery)就是说每次提交代码时立即构建,并可以将构建部署到生产环境中,本文将分享一些持续交付相关的方法和经验。

自动化(Automation)

自动化对于完善的CD管道来说必不可少,我们理应尽可能的用自动化取代手动工作以获得最大利益。

过去,我们的开发团队可能在将代码发布到生产环境之前一般会做测试,其中一些可能是手动的,一些则是自动的。但在持续交付的情况下,每次提交都要进行代码测试,因此最好的办法就是“自动化一切可自动化的东西”,并且不应仅限于开发团队。

软件中所有重要部分的自动化都是必要的——

  • 测试(Tests) - 单元测试、集成测试、UI测试、回归测试、性能测试...
  • 数据库的安装、备份和恢复
  • 产品及其依赖项的安装和测试
  • 代码文档和用户文档

根据我们的产品不同,可能还会有很多其他可自动化的部分,例如基于云计算的产品,可以自动配置基础架构。

经常提交、尽快提交(Commit often, Commit soon)

CD流程的第二个重要基础是“经常提交、尽快提交”的能力,在交付软件时,快速的反馈周期可以带来极大的不同。

然而不幸的是,大爆炸开发方法和部署(Big bang development approach and deployments)仍是业界的常态。用这种方式,每隔几个月、一次性发布大量代码到生产环境中很常见。

而在代码中引入大量更改并将其部署到生产系统中可能会产生意外后果。很难确切地知道出了什么问题,而且诊断起来很困难。以这种方式更新的大型系统很难恢复到工作状态,因为您无法轻松回滚。

持续交付要求您经常将更改与主分支集成。每次更改代码时,请将更改推送到版本控制。

如果我们没有整天commit,一般无法确切知道我们的commit如何适应系统的其他部分,或者它是否已经破坏了任何东西。如果我们使用的是版本控制系统,开发人员可以切换到过去任何给定时间点的代码。

频繁提交的另一个积极结果是我们可以更快地获得有关项目状态的反馈,我们很快就会发现某个解决方案走错了方向,而如果出现问题,我们只需要调试一些潜在的部分。另外,不要忘了有意义的提交备注很重要!

当开发人员长时间彼此孤立地工作时,实现CD几乎是不可能完成的任务。在大公司中,持续数月的开发周期并不罕见。当开发工作以这种方式发生时,在开发阶段结束时需要进行大量测试,这也就意味着在相当长的一段时间里,我们无法了解应用是否正常工作。

避免这种不确定性需要开发人员经常commit他们的工作,尽快让更改对其他人可用。在大型团队中,这一点很重要,这使得合并冲突和由大型提交引起的其他问题变得不那么频繁且更易于解决。

开发和运维(Developers and Operations)

先进的软件开发公司一般都至少遵循了Agile/Scrum方法的一部分。例如,Scrum的一个仪式是团队每天进行讨论:昨天做了什么、今天要做什么以及有什么困难,这么做的目的是让整个团队了解正在进行的工作。

提高开发团队生产环境知识的一种简单方法是让运维工程师参加,让开发团队能够更好地了解运维所做的工作。

从长远来看,我们需要DevOps,避免开发和运维成为两个孤岛。

生产环境(Production Environment)

CD的最后边界是部署到生产环境中。对于生成代码库的每次提交,不需要进行生产部署,但每个构建都需要生产就绪。

大多数开发团队对实际生产环境、硬件和软件的规范、配置、安全规则等了解不多,甚至根本无法访问生产环境。

改善这种情况需要采取的第一步,是建立一个尽可能接近真实生产环境的临时环境。

打破一体化(Breaking Monoliths)

有效实施CD的常见障碍是克服一体化架构代码库的“迟缓”,缓慢的构建、脆弱的代码库、复杂的代码和架构是一些常见的问题。

常见的方法是重新构建整个系统,但一般方法会涉及到大量的时间、资源和资金,以及技术挑战。

对于那些不专注于软件开发的公司来说,要获得管理层的批准要困难得多,因为这需要额外的预算和精力分配到可能只是微不足道的边际收益的事情上。

对于其他更注重软件的公司而言,从长远来看,重新构建整个解决方案可能是最好的方法。

我们建议的入门方法是将代码库拆分为多个存储库,每个存储库都集中在整个产品的较小子集上。这些较小的存储库中的每一个都应该是自包含的,它们应该有自己的构建脚本、测试等。

如此一来,CD流程可以更快实现,而无需对系统进行彻底“检修”。从长远来看,应使用微服务架构方法将这些单独的存储库进一步细分为更小的部分。

关于Rainbond

Rainbond(云帮)是"以应用为中心”的开源PaaS, 深度整合基于Kubernetes的容器管理、ServiceMesh微服务架构最佳实践、多类型CI/CD应用构建与交付、多数据中心资源管理等技术, 为用户提供云原生应用全生命周期解决方案,构建应用与基础设施、应用与应用、基础设施与基础设施之间互联互通的生态体系, 满足支撑业务高速发展所需的敏捷开发、高效运维和精益管理需求。

  • 网站
  • Github
  • 码云
  • 演示环境
  • 文档
  • 社区
  • 微信群: 添加微信“zqg5258423”并接受邀请入群

转载于:https://my.oschina.net/zhouyq/blog/2245761

你准备好持续交付(CD)了吗?相关推荐

  1. ci持续集成工程师前景_不要忽视持续集成(CI)/持续交付(CD)的13个优势

    原标题:不要忽视持续集成(CI)/持续交付(CD)的13个优势 持续集成(CI)/持续交付(CD)是现代软件开发周期的基础,人们需要了解持续集成(CI)/持续交付(CD)和其管道实施的所有好处. 在传 ...

  2. 软件持续集成(CI)、持续交付(CD)和持续部署(CD)

    CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时 ...

  3. 持续交付(CD)简单介绍

    Continuous Delivery,简称CD ​ 持续交付是指软件开发过程,从原始需求到最终产品开发过程中,较短周期内以需求的小颗粒度(小批量)频繁提交的过程.主要指集成后的代码在类生产环境(测试 ...

  4. 持续集成、持续交付(CI/CD)开篇,先来唠唠嗑

    前言 现在稍微有点规模的系统,很多都是采用分布式/微服务架构,将一个大系统拆分为很多个功能模块进行开发.测试.发布.管理等,如果全部流程都采用人工的形式进行的话,效率肯定是超级不高效滴.而且现在很多项 ...

  5. CI/CD(持续集成构建/持续交付):如何测试/集成/交付项目代码?(Jenkins,TravisCI)

    Table of Contents CI(Continuous integration,持续集成) CD(Continuous Delivery, 持续交付) Different types of t ...

  6. 测试开发工程师成长日记010 - Jenkins中的CI/CD/CT(持续集成构建/持续交付/持续测试)

    CI(Continuous integration,持续集成) CI(Continuous integration,中文意思是持续集成)是一种软件开发时间.持续集成强调开发人员提交了新代码之后,立刻进 ...

  7. 与专门团队一起持续交付

    BCG Digital Ventures的首席工程师Robin Weston 最近在伦敦持续生命周期大会(Continuous Lifecycle London)上发布了一份经验报告,在该报告中称,外 ...

  8. Docker持续交付部署类型

    女主宣言 不知道大家在平时部署项目的时候,是采用什么方式来持续部署的呢.在本篇文章中,女主就给大家整理了一下,普遍使用的几种持续交付部署方式.以及各种方式的优缺点,供大家参考使用. PS:丰富的一线技 ...

  9. 高效持续交付的7大原则

    原文链接:https://devops.com/7-highly-effective-continuous-delivery-principles/ 如果你身处IT领域,并且你不是昨天才出生的,那么你 ...

最新文章

  1. Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)、水平条形图(horizontal bar)
  2. 最大似然估计的一个示例
  3. 安全的SD-WAN是如何工作?—Vecloud
  4. 区块链浏览器_区块链FBI——如何用区块链浏览器追踪链上数据
  5. java多线程之wait_(三)java多线程之wait notify notifyAll
  6. 很久没来了,嘿嘿 问候一下大家,O(∩_∩)O哈哈~
  7. 神经网络-损失函数是不是凸的
  8. 绩效管理KPI指标体系设计:142页KPI设计思路与实施实践
  9. weblogic-wslt初探
  10. python 非线性规划_支持向量机:Stata 和 Python 实现
  11. FlexSim软件PF模块标识详细解释
  12. python中文文本聚类_python进行中文文本聚类实例(TFIDF计算、词袋构建)
  13. 邮件服务器备案,关于企业邮箱域名备案事项通知
  14. 几种流行Webservice框架
  15. 电脑运行c语言程序就蓝屏,常见电脑蓝屏代码,产生原因和解决办法
  16. 植物大战僵尸修改器 - 简易版
  17. 视频直播iOS端技术
  18. 攻防世界7分~部分8分题
  19. 单片机移频防啸叫_麦克风的啸叫怎么用移频电路进行啸叫抑制?
  20. Linux 下终于成功安装 pytorch !( Virtualenv 和 Anaconda 安装)

热门文章

  1. intellij idea 配置远程访问本地的tomcat项目
  2. HDU 5119 Happy Matt Friends ——(背包DP)
  3. 为SharePoint 2010创建Application Page
  4. Indy接收邮件可能会出现的一个Bug
  5. 让开源解读“甲骨文”--RHEL5.3部署安装Oracle Database10g Release2
  6. Performance — 前端性能监控利器
  7. 如果往错误的NEO地址转账会发生什么
  8. 第三天-零基础学习python
  9. 《java编程思想》学习笔记——内部类五
  10. Js中的window.parent ,window.top,window.self 详解