我们已经进入21世纪20年代,十多年的研究表明,具有高开发人员绩效的公司不仅在速度和产量方面优于竞争对手,而且在质量、创新、安全性、员工满意度,以及最重要的客户满意度方面得分更高。
除了一些独角兽公司,大多数传统企业都在努力转型。传统产品僵化的结构和缓慢的流程、单一的应用架构以及漫长的发布周期使得公司很难做出改变。
这并不是一个新现象。转型变革总是艰难的,公司需要很多年才能真正成功,失败的概率也非常高,这是因为转型必须在许多层面上进行——如果这些变化没有对齐,转型必然会失败。本书通过提供高开发人员绩效的研究,及加速软件交付的实例来帮助读者完成转型。
本书是DevOps实用指南,可帮助那些踏上DevOps之旅的团队进一步深入理解DevOps,并通过为常见问题提供简单的解决方案来提高软件交付性能。它将帮助团队找到正确的指标来衡量成功,并从其他成功案例中学习,而不是复制这些团队所做的事情。本书使用GitHub作为DevOps平台,展示了如何利用GitHub进行协作、精益管理以及安全和快速的软件交付。
读完本书后,读者将理解影响软件交付性能的因素,以及如何度量交付能力。因此读者将意识到自己所处的位置以及如何通过透明和简单的跨团队协作解决方案在“旅程”中前进。基于常见问题的简单解决方案,读者将了解如何利用GitHub的强大功能来加速:使用GitHub Projects实现工作的可视化;使用GitHub Insights衡量正确的指标;使用GitHub Actions和Advanced Security开展可靠的和经过验证的工程实践;以及迁移到基于事件的、松散耦合的软件架构。
本书适合开发人员、解决方案架构师、DevOps工程师和SRE,以及希望提高软件交付性能的工程师和产品经理阅读。这些人可能是DevOps的新手,或者已经有经验但很难实现最佳性能。他们可能已经有使用GitHub Enterprise或其他平台(如Azure DevOps、Team Foundation Server、GitLab、Bitbucket、Puppet、Chef或Jenkins)的经验。
第1章介绍精益管理背后的理论以及如何衡量绩效和文化变革。该章探讨了开发人员的生产力以及为什么这对于吸引人才和实现出色的客户满意度非常重要。
第2章介绍工作见解——通过应用精益原则加快软件交付速度。读者将学习如何使用GitHub Issues、Labels、Milestones和Projects在团队和产品之间计划、跟踪和可视化工作。
第3章介绍软件协作开发的重要性,以及如何利用GitHub在团队和不同领域之间进行协作。
第4章介绍异步工作方式的好处,以及如何利用它们来改善和共享责任,同时介绍了分布式团队、跨团队合作等内容。该章介绍了如何利用GitHub Mobile、Microsoft Teams、Slack、GitHub Pages、GitHubWiki和GitHub Discussions等工具,随时随地进行团队协作。
第5章介绍自由软件和开源软件的历史以及在近年来和云计算背景下的重要性。该章将介绍如何利用开源加快软件交付速度。此外,还将解释如何将开源实践应用于内部开源,帮助读者改变组织,并介绍开源和内部开源对内包和外包战略的影响。
第6章介绍自动化对于质量和速度的重要性。其中介绍了GitHub Actions以及如何使用它们进行各种类型的自动化,不仅仅局限于持续交付。
第7章介绍如何对GitHub Actions工作流程执行器使用不同的托管选项来处理混合云场景或硬件在环测试。其中展示了如何设置和管理自托管执行器。
第8章介绍如何结合GitHub Packages和语义化版本控制,借助GitHub Actions来管理团队和产品之间的依赖关系。
第9章介绍如何使用简单的实例在Microsoft Azure、AWS Elastic Container Service和Google Kubernetes Engine等任何云和平台上进行轻松部署。该章展示了如何使用GitHub Actions进行分阶段部署,以及如何使用基础设施即代码来自动化资源的供应。
第10章介绍功能标记(或功能切换)如何帮助读者减少复杂性并管理功能和软件的生命周期。
第11章介绍基于主干进行开发的好处,并介绍了加速软件交付的最佳工作流git。
第12章更详细地探讨了质量保证和测试对开发者速度的作用,并展示了如何通过测试自动化实现左移测试。该章还涵盖了在生产环境中进行测试和混沌工程。
第13章更广泛地探讨了安全在软件开发中的作用,如何将安全融入流程和实践DevSecOps,零信任以及如何左移安全。该章讨论了常见的攻击场景以及如何通过攻击模拟和红队-蓝队演习来实践安全并增强安全意识。该章还介绍了云上安全的开发环境GitHub Codespaces。
第14章介绍如何使用GitHub高级安全功能利用CodeQL和其他工具进行静态代码分析来消除漏洞、安全和合规问题,同时介绍了如何使用Dependabot成功管理软件供应链,以及如何使用密码扫描消除代码库中的密码信息。
第15章介绍如何保护环境中的部署,并以符合法规要求的方式自动化完整发布流水线。该章涵盖了软件物料清单(SBOM)、代码和提交签名、动态应用程序安全测试以及加固发布流水线的安全性。
第16章介绍松散耦合系统的重要性以及如何演变软件设计以实现这一目标。该章涵盖了微服务、进化式设计和事件驱动架构。
第17章介绍组织的沟通结构与系统架构(康威法则)之间的相关性,以及如何利用这一点来改善架构、组织结构和软件交付性能。该章涵盖了双比萨团队、逆康威演习以及单版本或多版本战略。
第18章介绍在产品和功能层面上进行精益产品管理的重要性。该章展示了如何将客户反馈纳入产品管理中,如何创建最简可行产品,以及如何管理企业投资组合。
第19章介绍如何通过基于证据的DevOps实践(如A/B测试)进行实验,以验证假设,并不断改进产品。该章还介绍如何利用目标与关键结果(OKR)赋能团队进行正确的实验并构建正确的产品。
第20章介绍GitHub如何作为综合性、开放的平台为团队提供服务。该章介绍GitHub不同的托管选项、价格以及如何将其集成到现有工具链中。
第21章讨论从不同平台迁移到GitHub的策略,以及与其他系统的集成点。该章介绍如何找到正确的迁移策略,以及如何使用GitHub企业导入器和Valet来完成繁重的工作。
第22章讨论了将存储库和团队组织成组织和企业以促进协作和便于管理的最佳实践。该章涵盖了基于角色的访问、自定义角色和外部合作者。
第23章将本书介绍的所有要素整合在一起。本书为读者提供了许多工具,可用于推动企业成功转型并提升开发者速度。但只有当所有要素都合而为一时,转型才能成功。该章将解释为什么许多转型都失败了,并告诉读者如何使企业转型成功。
如果读者想按照动手实践中的实验部署到Azure、AWS或谷歌,则需要给定云环境的账户。