持续集成
我同意贵校的定义。 持续集成是开发人员如何将代码持续集成到主线的一种策略——而不是频繁地。
您可能会声称这只是您的版本控制系统中的一种分支策略。
这与您分配给开发人员的任务的大小有关;如果一项任务预计需要 4-5 个工作日,那么开发人员将不会在接下来的 4-5 天内鼓励交付任何东西,因为他还没有完成任何事情。
所以大小很重要:
small task = continuous integration
big task = frequent integration
理想的任务规模不超过一天的工作量。这样一来,开发人员自然会每天至少进行一次集成。
持续交付
在持续交付中基本上有三个学校:
持续交付是持续集成的自然延伸
这所学校查看Addison-Wesley "Martin Fowler" signature series 并假设自 2007 年发布以来被称为“持续集成”,而 2011 年发布的版本被称为“持续交付” 它们可能是第 1+2 卷的同一概念概念,与连续的某事有关。
持续交付与敏捷软件开发有关
这所学校的观点是,持续交付就是能够支持敏捷运动中的原则,而不仅仅是概念性想法或意向书 但对于现实 - 在现实生活中。
在Agile Manifesto中第一次实际使用“持续交付”一词的地方采取了第一原则:
我们的首要任务是通过早期和持续交付有价值的软件来满足客户。
这所学校声称“持续交付”是一种范式,它包含了对您的 "definition of done" 实施自动验证所需的一切。
这所学校接受“持续交付”和流行词或大趋势"DevOps" 是同一枚硬币的反面,因为它们都试图接受或封装这种新的范式或方法,而不仅仅是一种技术。
持续交付是持续部署的同义词
第三派主张 Continuous Deployment 和 Continuous Delivery 可以互换使用,表示同一件事。
当开发人员准备好某些东西时,它会立即交付给最终用户,这在大多数情况下意味着它应该部署到生产环境中。因此“部署”和“交付”的含义相同。
加入哪个学校
您的大学显然加入了第一所学校,并声称我们指的是同一出版物系列的第 1+2 卷。我的观点是,这是对持续交付一词的误用。
我个人主张理解持续交付与实施对敏捷运动所陈述的想法和概念的现实支持有关。所以我加入了这所学校,它说这个词包含了一个完整的范式——比如“DevOps”。
使用delivery作为deploy同义词的学校主要由创建部署控制台的工具供应商提倡,试图从更广泛的使用中获得一点炒作持续交付。
持续部署
对持续部署的关注主要与最终用户对软件更新的访问依赖于更新该信息的某些集中式源的领域相关,并且该集中式源并不总是易于更新,因为它是单一的或具有(太) 本质上具有高度一致性(Web、SOA、数据库等)。
对于生产没有集中信息源(设备、消费产品、客户端安装等)或集中信息源易于更新的软件(应用商店工件管理系统、开源存储库等),几乎没有关于持续部署一词的炒作。他们只是部署;这不是什么大事 - 这不是需要特别关注的痛苦。
持续部署并不是每个人都普遍感兴趣的事实,这也是一个论点,即声称“交付”和“部署”是同义词的学校完全错了。因为持续交付实际上对每个人都非常有意义 - 即使您正在设备中开发嵌入式软件或发布框架的开源插件。
贵校关于持续部署是持续交付的自然下一步的定义隐含地假设每个经过 QA 的交付都应该立即可供最终用户使用,这更接近于我的部落用来描述术语“持续发布”,而这又是另一个对每个人都没有普遍意义的概念。
发行可能是一件非常具有战略意义或政治性的事情,没有理由假设每个人都想一直这样做(除非他们是一家在线书店或流媒体服务类型的公司)。尽管如此,那些不会一直盲目地发布所有东西的公司可能有很多理由让他们想成为部署大师,所以他们也这样做持续部署。不是发布到生产环境,而是 release-candidates 到 production-like 环境。
我再次相信你们的大学弄错了。他们将“持续部署”误认为“持续发布”。
持续部署只是将开发过程的结果持续转移到可以全面执行功能测试的类似生产环境的学科。
持续交付故事线
图片中的一切都栩栩如生:
持续集成过程是状态转换图中的前两个动作。哪个 - 如果成功 - 将启动实现 done 的定义的持续交付管道。部署只是此管道中必须连续完成的众多操作之一。理想情况下,从开发人员提交到 VCS 到管道确认我们拥有有效的候选发布版本,整个过程都是自动化的。