业内专家推荐
大模型正在重新定义我们对软件工程的理解,而持续交付等工程理念日益成为研发团队与人工智能技术接轨的基石。尽管大模型在知识管理方面表现卓越,但对每个人来说,“一图胜千言”依然是快速掌握复杂概念的捷径。《持续交付图解》通过图形化展示关键工程理念,让学习变得轻松有趣,堪称研发团队的必备神器。
肖然 Thoughtworks 中国区总经理、中关村智联秘书长
研发型组织是国内诸多企业真正实现数字化转型的重要途径,而持续交付技术是能够让那些原创技术成为企业生产力的重要途径。《持续交付图解》汇聚了作者多年的实践经验,以清晰的结构深入浅出地讲解了持续交付理论到实践的全方位知识。书中不仅涵盖了版本控制、测试、代码变更管理等关键环节,还深入探讨了自动化流水线的构建与安全策略,是提升软件交付效率与质量不可多得的宝贵资源。得知国内几位软件工程领域的高手能将此宝书翻译成中文,我感到很惊喜,我想无论你是新手还是有经验的开发者,甚至是企业高级管理人员,本书都能够从概念诠释、方法落地,甚至企业排兵布阵的角度帮助你理解和实践持续交付相关技术,强烈推荐给每一位追求高效、稳定交付软件的从业者。
杨海明 博士 联通数字科技有限公司CTO
很高兴在2024年看到有关于持续交付的新书出版,我觉得《持续交付图解》真的非常出色。翻开书稿的那一刻,瞬间将我的思绪拉回到十多年前。与持续交付的缘分始于2011年,那时Jez Humble和David Fraley在Addison-Wesley出版的Continuous Delivery(中文版书名是《持续交付》)刚问世不久,一位技术同行兴高采烈地向我推荐。仔细学习了书中的内容后,我如发现了新大陆般兴奋——原来软件研发过程可以做到如此持续、高质量地交付有效的价值给用户!在随后的多年里,我也一直在企业里探索持续交付的实践,并帮助许多团队设计、建设和实现了CI/CD。正如书中所言,持续交付代表了现代专业软件工程的研发过程,是每一个致力于提升软件工程效能的实践者和管理者都应掌握的基本功。更难能可贵的是,《持续交付图解》非常易读,作者通过卡通形象、有趣的案例和对话,让持续交付这个“工程味儿”满满的学科变得平易近人,容易理解。最后,真心推荐大家阅读本书,在持续交付的路上有所成就!
张乐 腾讯研发效能资深技术专家、智能化软件工程团队技术对话产品负责人
《持续交付图解》是一本将复杂概念以图解方式生动展现的软件工程宝典。作者以其丰富的经验,将持续交付的理论与实践技巧融会贯通,为读者带来了深入浅出的指导。书中不仅涵盖了持续集成、自动化测试和部署等关键技术,更通过直观的图表和实例,帮助读者快速理解和掌握持续交付的精髓。
中文版的问世,得益于姚冬、高俊宁、胡帅、刘志超几位老师准确而流畅的翻译。我很喜欢他们的文字,以及从文字中读到的对软件行业发展的见解与智慧。无论是软件开发的新手还是资深工程师,都能从这本书中获得宝贵的知识,提升个人技能,优化团队流程,最终实现更高效、更可靠的软件交付。强烈推荐给每一位致力于提升软件开发和交付能力的专业人士。
万学凡 凯捷中国副总裁、清华大学EMBA
如今研发效能已经成为企业数字化时代的核心竞争力,持续交付作为研发效能的核心实践,使得软件能够更快、更可靠地投入使用。《持续交付图解》内容非常广泛,可以帮助读者全面了解持续交付背后的理论和所涉及的技术要素,比如持续集成、版本控制、静态代码检查、持续测试、 度量指标等。
周纪海 汇丰科技证券技术服务部门DevSecOps负责人
《持续交付图解》通过生动的图解和实例,栩栩如生地讲解了实现持续交付能力所需要的所有实践。你可能已经读过一些有关持续交付的书或文章,如果依然不明觉厉,不妨试一下这种新颖的方式,看能否打通你的任督二脉。
刘华 汇丰科技云平台中国区总监 著有《猎豹行动:硝烟中的敏捷转型之旅》
第一眼看到书名,感觉这是一本很有意思的书。第一眼看到作者,感觉这应该是一本值得看的书。来自著名开源CI/CD引擎 Tekton项目负责人 Christie Wilson 的这本书让人读起来充满趣味,大量插图和漫画式的场景解读让各种枯燥的持续交付概念跃然纸上。非常喜欢这本书的风格,属于拿到就迫不及待去翻开的一本书。
徐磊 LEANSOFT首席架构师/CEO、微软MVP/Regional Director
正所谓“真佛只说家常话”,作者在本书中不仅通过丰富的场景和轻松可爱的配图,系统而全面地讲解了CI/CD的技术精髓,还巧妙地将朋友的名字赋予书中的人物角色,这些独特的安排不仅增加了书籍的趣味性,还让读者感受到作者的幽默与创意,为严肃的技术内容增添了一份活泼。几位译者对原著内容的精准传达,使得这本书颇具可读性,相信读者会在轻松愉快的氛围中获益良多。
吴非 资深企业架构师
在如今需求复杂多变的环境下,持续交付能力已经成为研发团队的必备技能。《持续交付图解》从理论到实践,全面且清晰地阐述了持续交付的各个方面。它不仅能够帮助团队迅速在理念上达成共识,更为提升团队整体交付效率提供了宝贵的实践指导。强烈推荐研发团队共同学习。
田恒源 AIDRIVEN PTY LIMITED联合创始人&CTO
推 荐 序 一
在这个信息大规模爆发的时代,软件已深入各行各业,并成为行业核心竞争力的表现,而软件的竞争已经不仅仅是产品本身功能的竞争,更是软件的交付效率和质量的竞争。持续交付已经成为推动软件行业创新和效率提升的关键实践。它不仅代表着一种技术流程的优化,更是一种企业文化和管理理念的革新。
《持续交付图解》一书的问世,为广大软件开发者和企业管理者提供了一本全面、实用的指南。在此,我非常荣幸地为这本深入浅出、理论与实践并重的著作撰写推荐序,并借此机会分享华为在持续交付领域的丰富实践。
《持续交付图解》不仅详细阐述了持续交付的概念、原则和流程,而且通过直观的图解和详实的案例,让读者能够快速理解和掌握持续交付的核心要点。书中不仅介绍了持续交付的基本概念和方法,还通过生动的案例展示持续交付在实际操作中的巨大价值。值得一提的是,本书的译者凭借其深厚的专业背景,将原著的精神和内容准确无误地呈现给了中文读者。
在推荐此书的同时,我想特别提到华为在持续交付领域的实践。作为全球领先的ICT解决方案提供商,华为深刻认识到持续交付对于提升软件能力的重要性。在华为,持续交付不仅仅是软件实践的变化,更是一种文化和思维的转变。华为的持续交付实践体现在以下几个方面。
持续集成:华为的软件开发团队采用持续集成实践,确保了代码的频繁集成和问题的及时发现,提高了软件的可靠性。
自动化构建与部署流水线:华为通过自动化的构建和部署流水线,实现了从开发到测试再到生产环境的自动化部署,极大地提高了交付效率。大大缩短了从代码提交到产品发布的周期。
端到端自动化测试:华为建立了端到端的自动化测试体系,从软件到硬件,从系统到应用,全面保障了产品质量。这一体系的建立,使得华为产品在市场上的竞争力得到了显著提升。
DevOps文化:华为在推行持续交付的同时,也在积极培育DevOps文化,鼓励跨部门协作,打破传统壁垒,实现快速响应市场变化。这种文化的推广,为华为的软件开发和运维团队带来了更高效的协作模式。
《持续交付图解》中的许多理念和华为的实践不谋而合,书中不仅对这些实践进行了理论上的阐释,还提供了具体的操作指南和工具介绍,这对于希望深入了解和实践持续交付的读者来说,无疑是宝贵的资源。书中的内容与华为的实践相互印证,为读者提供了一个学习持续交付的绝佳窗口。
我相信,无论是对于软件初学者还是资深从业者,《持续交付图解》都是一本不可多得的佳作。《持续交付图解》将成为软件开发者、项目管理者和IT从业人员的宝贵参考资料。它不仅能够帮助个人提升技能,还能够为企业带来实际的业务价值。这本书无疑会成为推动企业持续交付和DevOps转型的重要力量。
在此,我诚挚地推荐《持续交付图解》给每一位追求卓越的软件开发者和企业管理者,愿这本书能成为你在持续交付道路上的良师益友,成为你在持续交付旅程中的指南针,助力你和你的团队在数字化时代乘风破浪,创造辉煌。
王谦 华为云PaaS服务产品部 DevSecOps产品线总监
推 荐 序 二
如果你是从事软件行业的,一定知道,如今,持续交付几乎已经成为软件工程的代名词了。天下武功,唯快不破。过去,用软件实现一项业务,开发一款软件,动辄需要几年的时间,甚至开发一个功能,都要几个月的时间。但是敏捷、DevOps 以及持续交付等理念的出现,不断刷新了软件和功能开发周期的“奥运会记录”,最“牛”的团队甚至可以做到每天上新几个功能。
很多人有疑问,为什么需要持续交付,客户也说不需要每天发布几个功能。持续交付其实是一种能力,对于客户来说,他们需要的是按需发布,也就是他们想要的特性能在他们所需要的期限内随时上线。
要具备这样的能力,在整个软件开发的生命周期,从需求到发布,需要系统性的改进。不管是在需求阶段通过敏捷的方法把用户故事拆小,在架构和软件设计阶段的解耦,还是自动化各种重复的过程,如集成、部署、执行测试等,都会涉及文化、组织架构、思维方式、协作方式、流程、工具等的方方面面。所以这个改进过程是复杂的。每家公司、每个团队的实际情况又不一样,这个过程又是高度定制化的。要完全掌握这个能力,是一个知易行难的过程。
《持续交付图解》通过生动的图解和实例,栩栩如生地讲解了实现持续交付能力所需要的所有实践。同样的知识,不同的讲述方式,听众或读者的消化和理解程度会大相径庭。你可能已经读过一些有关这方面的书或文章,如果依然不明觉厉,不妨试一下这种新颖的方式,看能否打通你的任督二脉。
感谢姚冬、高俊宁等译者为中文读者带来这本书的中文版。两位译者都长期活跃于国内的 DevOps 推广活动中,既有充分的领域知识和经验,也有热爱与激情,持续为中国软件业整体的 DevOps 和持续交付转型贡献力量。因此,两位也是本书翻译的最合适人选之一,是本书中文版翻译质量的保证。
如果你有兴趣了解持续交付所涉及的流程,同时也想了解其中涉及的一些技术,那么这本书一定会对你有所帮助。
刘华
汇丰科技云平台中国区总监
《猎豹行动:硝烟中的敏捷转型之旅》《软件交付那些事儿》
《软件研发行业创新实战案例解析》作者之一
《图数据库实战》《可解释AI实战》《机器学习大数据平台的构建、
任务实现与数据治理》译者之一
译 者 序
自从2016年我首次接触DevOps理念以来,这一领域的发展可谓日新月异。对我来说,Jez Humble的Continuous Delivery (中文版书名是《持续交付》)一书如同DevOps世界的引路人,它让我深刻理解到,没有持续交付的自动化,DevOps的愿景便难以落地。
在亲身参与的这场DevOps变革中,我见证了持续交付流水线自动化的不断演进。但令人不解的是,当前行业的焦点似乎逐渐转向了对各种持续交付工具的研究和比拼。市场上充斥着琳琅满目的持续集成与持续交付平台,但事实上,许多开发者仍然陷入繁琐低效的交付流程中,这些先进的工具并未如预期般减轻他们的工作负担。
就在我感到迷茫之时,中国DevOps社区的姚冬老师给予我一个宝贵的机会——翻译这本《持续交付图解》。当我深入研读英文稿时,顿觉豁然开朗。在这本书翻译的过程中,它提醒我回归持续交付的本质,从基础原理出发,重新审视如何构建卓越实践的持续交付流水线。此次翻译经历不仅让我实现了完成首部技术译作的小目标,更让我有机会将这些宝贵理念应用到实际工作中,显著提升了团队持续交付流水线的效率,也让我的同事们再次体会到了DevOps的非凡魅力。
在此,我要特别感谢我的妻子。作为双胞胎姐妹的母亲,她的坚定支持和鼓励,让我能在繁忙的工作之余顺利完成这部译作的翻译。家庭,永远是我精神的坚强后盾。
最后,我要再次感谢所有支持和帮助过我的人,是你们的陪伴和鼓励让我能够不断前行。同时,我也希望这本书能够为读者们带来实实在在的帮助,引领大家在DevOps的道路上不断探索和创新。
高俊宁
随着云原生、AI大模型等技术的加持,软件工程领域近些年在研发方法和工具方面都产生了翻天覆地的变化。行业从业者一直都被各种层出不穷的概念所牵引甚至“胁迫”。诸多流行著作也从各个角度对相关概念进行了诠释,但是大家似乎仍纠结一个核心的问题:如何让这些概念真正落地?
软件工程是一个复杂的工程学科,许多概念的诞生和落地实际上都有着诸多的上下文。研发实践的开展离不开团队文化、支撑工具,甚至管理方法的加持。我们容易被新概念、新方法所吸引,而忽视支撑这些概念落地的必要条件,这就是为什么新概念难以落地,新方法难以融会贯通的真正原因,所谓“一看就会,一练就废”!
《持续交付图解》是大型软件研发从业者经验传授的经典著作,Christie从MVP故事出发,利用敏捷迭代的方法将持续集成、持续构建、持续交付等复杂的概念融入全书的叙述中。难能可贵的是,这些方法均巧妙地集成到了一个创业公司不断升级打怪的故事中,作者的叙述让每位读者不仅知其然且知其所以然,我想这就是本书最难能可贵的价值。这些重要概念的上下文才是诸位看官决定是否采纳,以及如何采纳那些当下流行技术词汇的重要依据。
书籍的翻译是译者根据自己的从业经历和专业经验以本地化的描述将原书概念转述的过程,本书的翻译也跨越了一年多的时间。感谢我的妻子能支撑我在繁忙的工作之外有充裕的时间完成这本书的翻译工作。感谢参与这本书翻译的每一位老师,我们从初稿再到不断交叉审核,才让本书内容越来越准确、精确。与冬哥、俊宁、志超的团队作战是一段愉快又令人难忘的经历。
胡帅
在技术日新月异的今天,软件开发领域正经历着前所未有的变革,而持续交付作为提升开发效率、加速产品迭代的核心实践,其重要性不言而喻。《持续交付图解》正是这样一部深度剖析持续交付精髓,为开发者提供实操指南的宝贵资料。我有幸承担该书第4至第7章的翻译工作,这段翻译旅程,是对专业精神的致敬,也是对技术热情的颂歌。
第4章“有效使用静态代码检查”,深入探讨了如何运用这一利器确保代码质量。在Becky和超级游戏控制台的故事中,我们见证了静态代码检查如何帮助大型项目应对代码缺陷、错误及风格问题,实现从混乱到有序的转变。该章不仅强调了零问题目标的设定,也教会我们如何策略性地处理遗留代码库,平衡修复与新问题引入之间的微妙关系,体现了技术决策的艺术。
第5章“处理有噪声的测试”直面持续交付中的痛点——测试的可靠性。它不仅是对测试重要性的重申,更是提供了一套实战策略,帮助开发者从嘈杂的测试反馈中抽丝剥茧,识别并消除测试脆弱性,确保测试结果的准确无误,为持续交付奠定坚实基础。
速度与效率,在第6章“让那些缓慢的测试套件变得更快”中被赋予了新的含义。本章通过优化测试执行策略,如采用测试金字塔原则、并行与分片技术,不仅让测试套件的执行更加高效,也让开发反馈循环大大缩短,为持续集成与交付扫清了又一道障碍。
第7章“在正确的时间发出正确的信号”聚焦于代码变更管理的艺术。它不仅揭示了缺陷引入的关键时间点,还深入讨论了冲突处理技术的权衡,展示了如何通过精细的CI策略,在代码生命周期的每个阶段捕捉并修正缺陷,确保每一次提交都是向高质量软件迈进的坚实步伐。
翻译这4章内容的过程,是一次深刻的技术之旅,也是对持续交付理念的一次深刻理解。我力求在保留原著精髓的同时,以最贴近中文读者的语言和表达,将这些宝贵的知识与实践技巧传递给每一位中国开发者。愿这些篇章能成为你持续交付实践道路上的明灯,照亮你技术创新的征途。
在这段难忘的翻译旅途中,我有幸与3位才华横溢、专业敬业的伙伴——冬哥、胡帅、俊宁并肩作战,一同探索分享《持续交付图解》的奥秘。每当遇到晦涩难懂的专业术语或技术细节,灵活地展开探讨交流和查阅资料,甚至直接与相关专家沟通,确保我们的翻译既准确无误又贴近实际。印象最深刻的是flakes/flaky/flaking这些词的翻译当时还真是难到我了,不过好在大家一起讨论并且冬哥请教了领域专家,最终完成了准确、专业而又不失易于理解的翻译。这段经历,不仅是对技术知识的深度挖掘,更是一场团队协作与友谊的见证。
在此,我要感谢我的家人,特别感谢我的妻子和儿子,给我勇气和支持。感谢编辑团队和出版社的专业指导,使得这本书得以顺利面世。
这段难忘的旅程是技术传道路上的一次宝贵经历,我相信,这份共同努力的成果,定能为中文读者开启一扇通往持续交付实践的新窗口,激发更多创新与进步的火花。
刘志超
译 者 简 介
姚冬,华为云PaaS产品部首席解决方案架构师,资深云计算、DevOps与精益敏捷专家。IDCF(国际DevOps教练联合会)社区联合发起人,中国DevOps社区21年度理事长,《敏捷无敌之DevOps时代》、《数字化时代研发效能跃升方法与实践》、《价值流动》、《DevOps业务视角》、《运维困境与DevOps破解之道》、《基础设施即代码》等书作(译)者。
高俊宁,汇丰科技敏捷教练,近20年软件行业经验,敏捷和DevOps践行者,近年主要负责企业和部门的敏捷转型和敏捷落地工作。中国DevOps社区核心组织者、精英译者,参与翻译出版《SRE工程师应知应会97件事》。
胡帅,中国联通集团技术专家,中国DevOps社区理事,精英译者。深耕于软件工程、软件供应链安全以及企业大型系统的研发设计工作。拥有多篇软件工程领域的发明专利,研发成果应用于多个中大型企业。
刘志超,华为云研发管理人员,云服务架构师、云原生布道者&专家,主导云服务微服务化架构、高性能分布式存储系统容器化架构设计及商用。中国DevOps社区核心组织者、精英译者,长期在系统工程、云原生、软件过程与管理、持续交付领域深耕,参与翻译出版《SRE工程师应知应会97件事》。华为开发者社区(深圳)筹备组核心成员。专注于最有价值的事情,坚信科技改变生活,秉持“高效工作,快乐生活”的理念,让研发更简单,让生活更美好。
序 言
当我和David Farley合著Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley,2010)一书时,我们认为书中描述的我们多年实践的原则“一种现代的、整体的软件交付方法”会为使用它的团队和组织带来巨大好处。多个研究项目(包括我参与的由Nicole Forsgren博士主导,并在本书第8章和第10章描述的项目)表明,它可以带来更高的质量和稳定性,以及更快的交付速度。
尽管持续集成和持续交付(Continuous Integration and Continuous Delivery,CI/CD)现在已成为行业标准的做法实践,但是仍然十分难以落地。仍有许多团队(还有客户)需要处理晚上或周末等休息时间偶发的、有风险的发布,计划内和计划外的停机、回滚,以及性能、可靠性、安全性等方面的问题。这些问题其实是可以避免的,但是要解决这些问题需要在团队、工具和组织文化方面持续投资。
至关重要的是,许多刚进入这个行业的人不熟悉基本的实践以及如何将这些做法落地。本书在解决这个问题上做了出色的工作。Christie Wilson是持续交付方面的专家,在Google领导开源Tekton CI/CD项目,曾撰写过一本全面、清晰且深入的书,描述了实现现代软件交付过程的相关技术与细节。她不仅讲述了理论和实践,还展示了它们为什么重要,并提供了步骤指南来解决那些大家正在努力攻关的难题,例如采用迭代方法,同时进行新特性开发和“遗留”代码处理。
我希望本书能作为入门读物出现在每个软件团队新初级员工的入职阅读书清单中。对于那些更有经验的软件工程师来说,采用不熟悉的工作方式时,这本书也将被证明是宝贵的详细指南。我很感谢Christie创建了这一优秀资源,我相信它将推动人们更好地理解如何实现一个现代软件的交付过程,从而使我们服务的行业和更广泛的公众从中受益。
—— Jez Humble
Continuous Delivery、The DevOps Handbook与Accelerate的合著者
软件的美妙之处在于一切都可随时间的推移而改进。但这也是软件的诅咒——因为我们可以改变它,所以我们几乎一直在改变。对新特性或其他特性进行改进的持续压力,使我们渴望以高效的方式集成代码变更、测试变更,并将其发布给用户。
Christie Wilson经历了这个过程,并从多个角度观察该问题。她写了一本如何让软件团队保持高效的书。如果一个团队能通过自动化实现高效研发,那么其产品就会具有一定的竞争优势。随着时间的推移,这些团队不仅获得了市场份额,而且士气更高,离职率更低。能成为高效团队的一员真是太棒了!
一个常见的误解是,速度较低的软件流程,可能因为有更多的部署障碍而更加安全。例如,许多团队反对变更,因此每个季度发布一次变更。这种方法存在两个严重的缺陷。首先,通常会将集成大量代码变更的困难任务推到最后,但是如果上一个版本遗留了大量的代码需要集成,就可能出现可怕的错误并导致严重的交付延迟。其次,慢交付过程会阻碍快速集成安全补丁,而这本是大多数团队的关键目标。本书中描述的方法都是关于持续的(小)集成的,这既能对问题进行快速反馈,又能为修补安全问题提供可行的机制。
在过去几年,围绕软件供应链进行的攻击,导致安全挑战急剧攀升,现代软件包含了许多三方组件——来自其他团队、其他公司和开源软件。需要将1000个组件集成在一起的事儿并不罕见。这需要不同程度的自动化:需要知道所有的组件来源,以及它们是如何集成在一起的。《持续交付图解》是第一本涵盖这些问题,并概括如何为系统提升安全性的书籍。
最后,虽然在这个领域中有大量的工具可供选择,但本书在涵盖关键概念和目标方面做得很好,同时通过例子和对替代方案的讨论帮助你实现目标。我发现这本书是复杂时空中的一股清风,我希望你也会喜欢它。
—— Eric Brewer
Google院士兼基础设施副总裁
前 言
自从我意识到编程是一件了不起的事后,它就让我着迷。我记得(许多年前)一个朋友告诉我他写了一个国际象棋程序,虽然当时我完全不知道他在说什么,但我同时在想:(a)我从未思考过计算机的工作原理;(b)我现在确实需要尽可能了解它们。接下来的事情或令人惊叹,或令人困惑(“变量就像一个邮箱”是一个在事后看来非常合理的类比,但当我第一次有这个想法时,它只是从我的脑中闪过)。自从我在高中的第一堂Turbo Pascal课和自学Java之后,我就迷上了编程。
尽管我发现编程本身很吸引人,但我对软件开发过程同样感兴趣。在我的职业生涯中,至少有一半时间都因这些过程得到的关注如此之少而失望。软件开发过程不仅对软件质量有影响,还会影响研发人员的心情和工作效率。不仅如此,每当遇到轻视这项工作的工程师和管理者时,我也会感到沮丧。这通常是被尽快写出代码才是对投资的最好回报的观点所驱使。
具有讽刺意味的是,时间和研究表明速度确实是成功的关键指标,但要真正让工程师的工作变得更快并且可持续,速度必须与安全保持平衡。同时最大化软件开发的速度和安全性才是持续交付的核心,这个概念和相关实践引起了我的共鸣。也可以这么说,直到最近我才意识到什么才是持续交付的本质。
首先吸引我的是测试和自动化。我仍然记得第一次接触测试驱动开发(Test-Driven Development,TDD)这个概念时,我体验到一种自由感,意识到居然在开发软件的同时还可以验证它。能够边开发边检查代码,就像卸下了肩上的一个巨大的重担——具体来说,我脑海中的声音有时说:我不知道我在做什么,我写的东西都无法正常工作。而工具和自动化能够帮助我在承担重要工作时保持自信:使用它们就像有一个朋友坐在我身边,指导我的工作。
持续交付作为一个概念,集测试和自动化的精华于一身,这些方法在职业生涯中让我获益良多。此外,持续交付将概念打包成一套实践,可以帮助大家改进开发软件的方式。我想帮助那些有时自我怀疑或与恐惧斗争的工程师(我猜大多数人至少有时会这样)——使他们能感受到我第一次编写测试用例时的那种自由、有力和自信。
感谢你花时间阅读本书。我希望你在看完本书后至少可以领悟到软件的大多数缺陷和错误与代码本身并没有什么关系(当然,也与代码编写者没有关系)。真正导致这些缺陷和错误的软件开发流程,需要一些TLC(Tender Love Care,温柔体贴的关怀)。
致 谢
首先,感谢我的丈夫Torin Sandall(严格来说我们现在都是华威(华威商学院)的一员,但我们还在适应!)无条件地支持我,他不仅在我写作的这几年里一直鼓励我,还承担了许多本应该我做的事情,以确保我能够在忙碌的生活中完成这本书。(可以说,从纽约搬到温哥华,结婚并在短短一年内生孩子,只是整个故事的一部分!)
感谢 Bert Bates永远改变了我对教学和表达想法的方式。我希望你能感受到本书很好地诠释了你真切有效的教学风格!我还有很长的路要走,但是我会在以后的生活中把你教给我的东西应用到每一篇文章和每一次会议演讲中。
感谢非技术界的朋友们,他们不断鼓励我(尽管我不确定是否真的能向他们说明白本书的作用),甚至在我坚持不下去的时候一直陪伴我;特别是Sarah Taplin 和Sasha Burden,她们在第3章和第8章中作为初创企业的创始人体验着另一个世界的生活。
诚挚感谢我有幸遇到的老师们,他们给我的生活带来了如此大的变化:Stuart Gaitt,因为她鼓励了一个古怪的小女孩;Shannon Rodgers,谢谢他教会我真正思考;Aman Abdulla,感谢他教给我实用的工程技能,正是他的高标准要求,才使我能走到今天。
非常感谢Manning出版社的每个人给我机会写作本书;这令我梦想成真!感谢出版商Marjan Bace;感谢Mike Stephens联系了我并开始了这段奇妙的旅程;感谢Ian Hough一章一章地与我密切合作,耐心阅读本书;感谢Mark Elston审阅了不成熟的初稿(包括所有缺点);感谢Ninoslav Cerkez进行仔细的技术审查;感谢评论编辑Aleksandar Dragosavlijevic。还要感谢Sharon Wilkey,她帮我改正了大量的语法(和其他)错误;感谢Kathleen Rossland耐心地指导我完成出版过程;还要感谢许多帮我出版本书的幕后工作者。感谢所有评审专家: Andrea C. Granata、Barnaby Norman、Billy O’Callaghan、Brent Honadel、Chris Viner、Clifford Thurber、Craig Smith、Daniel Vasquez、Javid Asgarov、John Guthrie、Jorge Bo、Kamesh Ganesan、Mike Haller、Ninoslav Cerkez、Oliver Korten、Prabhuti Prakash、Raymond Cheung、Sergio Ferna?ndez Gonza?lez、Swaminathan Subramanian、Tobias Getrost、Tony Sweets、Vadim Turkov、William Jamir Silva和Zorodzayi Mukuya——你们的建议让这本书变得更好。同样要感谢Manning出版社的营销团队,特别是Radmila Ercegovac帮助我走出舒适区,加入了一些播客社区;感谢Stjepan Jurekovic和Lucas Weber帮我首先在Twitch上亮相,这非常有趣。
非常感谢每一位在我写本书时耐心审阅并给我反馈的人,特别是那些帮助我克服种种困难的Google公司的同事:Joel Friedman、Damith Karunaratne、Dan Lorenc、Mike Dahlin。万分感谢Steven Ernest,他教会了我代码提交注释和发布说明有多重要,让我认识到代码注释有多么不标准。感谢Jerop Kipruto不仅阅读了本书,而且对内容感到兴奋并立即应用到实践中!
最后,感谢Eric Brewer一路上的鼓励和建议,感谢他不仅相信本书,还花时间为它撰写了一篇鼓舞人心的序言。也感谢Jez Humble在写书开始时与我分享的所有经验——遗憾的是,我完全忽略了这些经验,并且现在已经有了惨痛的教训,但亡羊补牢犹未迟也!我想对你们说:你们在序言中对我的认可是我职业生涯的高光时刻。
关 于 本 书
本书旨在成为持续交付入门并有效落地的不可或缺的指南:本书通过覆盖持续交付的各个实践阶段,帮助你掌握将这些实践变为自动化流程所需要的基础能力。这种知识都是通过几年来之不易的经验积累后才能掌握的。希望本书能给你一条捷径,这样你就可以轻松地完成工作了!
本书读者对象
本书是为每个从事日常软件研发工作的人准备的。为了从本书中获得最大收益,你应该对Shell脚本的基础知识有所了解,至少掌握一种编程语言,并具备一些测试经验。建议你还对版本控制、HTTP服务器和容器有一些经验。你不需要深入了解这些领域的内容,如果需要,可以边阅读边深入研究。
本书内容安排:路线图
本书分为4个部分,共13章。前两章为第Ⅰ部分,介绍了持续交付的概念以及本书其余部分需要用到的术语。
第1章定义了持续交付,并解释了它与持续集成和持续部署等相关术语的关系。
第2章介绍了构成持续交付自动化的基本要素,包括贯穿本书其余部分的术语。
第Ⅱ部分是关于组成持续集成的各种活动,这些活动对于持续交付来说不可或缺。
第3章解释了版本控制在持续交付中的重要作用;没有版本控制,就无法实现持续交付。
第4章着眼于持续集成中一个强大但很少被提及的元素:静态分析——特别是静态代码检查——以及如何将静态代码检查应用于遗留代码。
第5章和第6章的主题是测试,是持续集成中重要的验证部分。这两章专注于随着时间的推移在测试套件(测试用例集合)中积累的常见问题——特别是那些结果变得不准确或执行速度越来越慢的测试套件,而不是教你如何测试(关于这个主题,许多书籍都介绍过)。
第7章介绍了代码变更的生命周期,分析了所有可能出现缺陷的地方,以及如何通过建立自动化机制在这些缺陷一出现时就捕获并且消灭它们。
第Ⅲ部分通过持续集成验证软件代码变更,并推动软件发布。
第8章介绍了版本控制,通过对DORA指标的剖析展示了版本控制如何影响发布速度。
第9章演示了如何通过采纳SLSA标准来安全地构建工件制品,并解释了版本控制的重要性。
第10章回到DORA指标,重点关注与稳定性相关的指标,并研究了提高软件稳定性的各种部署方法。
在第Ⅳ部分,从全局的角度介绍适用于持续交付自动化的相关概念。
第11章回顾了前几章介绍的持续交付的相关要素,并展示了如何有效地将这些要素应用到新项目和遗留项目。
第12章聚焦于驱动任何持续交付自动化的核心:shell脚本。你将看到如何将在其他代码中使用的最佳实践应用到该脚本,我们依赖这些脚本来安全、正确地交付软件。
第13章着眼于自动化流水线的整体结构,我们需要基于此流水线进行持续交付。此外,该章还对持续交付自动化系统的功能进行建模,以确保这些功能有效。
本书的最后是两个附录,探讨了在撰写本书时所流行的持续交付和版本控制系统的具体特征。
我建议读者从第1章开始阅读。像持续交付这样的术语,在现实世界中有不一样的使用语境,理解它将有助于理解其他章节的内容。
按顺序阅读第Ⅱ部分和第Ⅲ部分是理解本书最清晰的方式,因为后面的各章是建立在之前章节基础上的。第Ⅲ部分假设读者已理解了第Ⅱ部分所描述的持续集成实践。话虽如此,如果你愿意,也可以一起跳过这些章节,每章都会引用其他章节的相关内容。
第Ⅳ部分是本书的高阶内容部分。本部分的每章都引用了之前章节介绍的概念,当你大体上获得了一些使用持续交付系统的经验后,一些高阶内容(如第12章)可能会更有意义。
作 者 简 介
Christie Wilson是一名软件工程师。她经常在Kubecon、OSCON、QCon、PyCon等会议上就CI/CD及相关主题发表演讲。Christie的职业生涯始于移动端Web应用开发。在从事AAA游戏的后端开发时,她编写的功能通常在系统大规模发布后才会被许多人同时使用。为此,她构建了负载和系统测试平台。
凭借处理复杂部署环境、核心关键系统和应对突发流量的经验,她加入了Google并从事相关方向的工作。在Google,她为AppEngine、boot-strapped Knative构建了内部生产力工具,并创建了Tekton,这是一个基于Kubernetes(目前有65家以上的公司参与)构建的云原生CI/CD平台。