精华内容
下载资源
问答
  • 持续交付

    2019-07-16 23:22:06
    持续交付

    持续交付:一套软件工程方法论和许多的最佳实践的集合

    持续继承:从编码到构建再到测试的反复持续的过程

    持续交付:通过外部反馈对“持续继承”进行进行优化的过程

    持续部署:将可交付的产品,快速安全的交给用户的一套方法和系统,是“持续交付”的最后一公里

    持续交付会将多个部门,定义好规范,也方便某个选型技术快速实验,有快速回滚的兜底保障,能把整个开发流程固化,使开发人员更专注业务,能更快的交付产品方便验证,对于程序员来说持续交付涵盖了 设计-测试-部署-运维-运营等多个缓解

    展开全文
  • 持续交付模式

    2021-03-23 14:09:16
    持续交付,以自动化或半自动化方式,将构建版本从一个环境提送(promote)到更接近实际生产的交付准备环境;这常常是公司在这方面演进的下一步。  英文原文:PatternsforContinuousDelivery  当你有了持续集成需要...
  • 持续集成持续部署持续交付 如今,每个DevOps用户都知道CI / CD是一个概念。 CI代表持续集成,而CD通常可互换使用,以表示“持续交付”和“持续部署”。 他们都是同一件事吗? 没有。 他们有共同的目标吗? 是。...

    持续集成持续部署持续交付

    如今,每个DevOps用户都知道CI / CD是一个概念。 CI代表持续集成,而CD通常可互换使用,以表示“持续交付”和“持续部署”。

    他们都是同一件事吗? 没有。

    他们有共同的目标吗? 是。

    虽然两种做法看起来很相似,但两者之间还是有一条细线。 让我们探讨一下DevOps环境中这两个术语的含义。

    持续交付与持续部署

    持续集成涉及一系列步骤,这些步骤将自动执行以集成来自多个源的代码,创建构建并进行测试。 每次构建或一组代码通过测试时,都会自动将其部署到过渡环境中,在该环境中进行进一步的测试,例如负载测试和手动探索性测试。 根据项目交付要求,此过程可以重复几天。

    持续交付可通过持续实施修补程序和反馈来帮助您构建完善的软件版本,直到最终您决定将其投入生产为止。 换句话说,持续交付涉及围绕向客户发布什么以及何时发布给客户的决策。 这构成了两者之间差异的基础。

    连续部署中 ,每项更改都会通过一条自动化管道,并且该应用程序的工作版本会自动推送到生产环境 它不涉及任何发布批准周期,项目团队需要确保每次更新,测试和发布代码时,它都能在客户端顺利运行。 当然,很大程度上取决于测试套件的质量。 通过连续部署,团队可以在任何一天部署多个软件,而不必为主要版本而费心。

    连续交付通常涉及类似于生产的分段区域,在最终发行版中具有强制性的时间滞后。 这种滞后包括在将代码发布到生产环境之前,检查并手动接受代码中的更改。

    相反,连续部署不需要暂存区域来手动检查和验证代码更改。 这是因为自动化测试已集成在开发过程的早期,并且在发行的所有阶段都将继续进行。

    整合交付和部署以实现共同目标

    作为开发人员,基于对CI / CD实践的信心,您可能会觉得自动化部署可能会带来风险或具有更多优势。 尽管如此,在某些情况下应用连续部署仍存在一些合法限制:

    • 法规遵从性,市场营销决策或其他限制可能会阻止IT组织采用连续部署。
    • 其他考虑因素,例如IT组织内DevOps流程的成熟度,也会影响自动化代码部署的决策。

    对于连续交付,在将代码部署到生产中进行手动工作会延长交付时间。 但是,出于合理的原因,为什么对于某些企业而言,连续交付是更方便的选择。

    持续交付为需要部署决策以权威的人工智能支持的组织提供了竞争优势。 它允许团队在准备就绪时交付新功能,与真实客户一起测试工作原型,并构建和发展更稳定,更具弹性的系统。

    反过来,这减少了不断发展的产品和服务的成本,提高了产品质量并减少了团队的倦怠。

    在某些情况下,交付和部署的概念并不像其他地方那样重要。 例如,如果您已经为库做出了贡献或创建了构件,则不太可能将其部署在正在运行的系统上。 换句话说,没有部署阶段。 您只需将代码推送到存储库中,以供其他应用程序使用。 同样,对于大多数Web应用程序,团队通常没有单独的构建和部署阶段,这意味着交付和部署阶段之间没有明显的区别。

    但是,要自动化部署,您可以探索用于应用程序发行流程的高端工具。 ARO全面管理以下方面的软件版本:

    • 应用包装
    • 发行版本
    • 数据库更新
    • 服务器配置管理
    • 行事历
    • 前滚和回滚
    • 安全访问
    • 稽核

    Jenkins和Ansible是市场上流行的CI / CD自动化工具。 这些工具和API的各种自定义设置可以嵌入附加功能并提高生产率。 组织还可以遵循蓝/绿部署,金丝雀部署功能标记等,以安全地自动化交付和部署过程。

    正确地结合持续部署,持续交付将巩固DevOps管道的基础,并且是敏捷DevOps计划的核心。 它为测试和数据中心团队提供了自动将变更推向生产,获得即时反馈并缩短发布周期所需的工具,从而促进了敏捷实践。

    这些较短的发布周期使您能够以最低的TAT交付最高的软件质量。 这成为在软件交付管道中实施CI / CD的唯一目的。 你能做到吗? 否则,您需要使用CloudBees CodeShip之类的产品重新考虑,重新评估和发展。

    开始使用CloudBees CodeShip。

    额外资源

    持续交付与持续部署之间有一条很好的界限。 通过@codeship了解与@ethangj的区别

    翻译自: https://www.javacodegeeks.com/2019/06/whats-the-difference-between-continuous-delivery-vs-continuous-deployment.html

    持续集成持续部署持续交付

    展开全文
  • 在DevOps最佳实践里面分为了研发管理,持续交付和技术运营几个关键的过程域。但是在实践的过程中,最容易出现问题的不是单个技术点,而是跨域的协同问题,或者说研发过程管理和持续集成交付本身就是密不可分的两个...

    7afc3b1943ed7c35e94ea63f9c2788d7.png

    在DevOps最佳实践里面分为了研发管理,持续交付和技术运营几个关键的过程域。但是在实践的过程中,最容易出现问题的不是单个技术点,而是跨域的协同问题,或者说研发过程管理和持续集成交付本身就是密不可分的两个部分,我们只是为了容易理解和学习将其划分为了不同的过程域而已。

    任何一次新的编译构建部署完成后都涉及到测试人员测试,测试人员测试出问题后又会提交Bug,开发人员修改Bug后检入代码,等待下一次打包部署以形成多次迭代。整个过程最好方式就是要尽量减少大量的人工沟通协同,而是应该通过工具链协同来完成。

    对于传统的持续集成,一般最佳实践为每天晚上进行自动化构建和冒烟测试,而对于当期的DevOps过程,在设计完流水线后,可以手工去启动流水线作业,也可以自动去执行流水线,流水线执行时间频度也可以进一步缩短,假设我们每2个小时自动化的执行一次流水线作业,我们以此场景来做进一步梳理。

    流水线增加启动检查节点-虽然2小时执行一次流水线,但是在执行前先进行启动前检查,如果在最近2个小时内没有新代码check in,那么不执行流水线。其次,如果上一次流水线执行实例还处于待处理或未关闭状态的时候,同样也不执行流水线作业而直接跳过。

    是否需要人工验证:流水线打包部署包括两个方面,一个是新功能提交或新bug解决,只有这种情况才需要人工验证。因此一次流水线执行如果没有新需求或Bug状态变化,那么应该直接跳过人工验证节点并关闭。反之,则应该跳转到待人工验证环节。

    需求和缺陷的管理:注意新需求和新缺陷都应该提交,都有状态,需求细分到具体的需求功能点,同时测试人员提交的缺陷应该对应到具体的需求功能点上面。一个需求开发完成后,需求本身也到待验证状态,但是一个待验证的需求是否能够关闭则必须是改需求下面所有的bug都解决完成后才能够关闭。

    需求和缺陷状态的变化:开发人员首先是将需求或缺陷完成,并在本机进行自测通过,然后将代码check in到配置管理库。同时手工将需求或缺陷状态处理到待部署状态。在流水线启动后,如果整个构建打包和部署成功,则在成功完成应用部署后,将待部署状态的需求或bug转到待验证状态。在部署完成后测试人员可以看到待验证的bug或需求,那么他进入当前的测试环境一定是最新的可以进行缺陷验证的环境。

    应用部署和环境迁移:如何理清这两者的关系,包括在流水线节点设计的时候是同种类型的一个节点还是不同的两个节点?对于应用来说是直接将编译打包后的镜像执行进行部署,前面有编译构建操作;而对于环境迁移来说则是直接从制品库里面使用已有镜像进行环境部署。

    流水线模板和流水线实例应该是两个不同的概念,一个流水线模板每次运行都会产生一个实例,而每次实例都会形成一次构建版本号。即每次打包后形成的镜像入库也会附带上这么一个流水线实例号。那么我们的应用部署操作本身就简单的,对于应用部署活动节点编排在流水线上面,作用是进行应用部署,但是本质是从制品库拿到对应镜像去部署?如何拿到对应镜像,基于流水线实例号就可以很好的进行对接上。

    从SIT到UAT环境:在环境迁移中,我们设置两个环境,一个SIT环境供内部测试人员测试,一个UAT环境供客户方进行UAT测试,那么在SIT测试完成后可以将SIT环境的镜像包迁移到UAT环境进行部署。那么并不是每一次流水线作业都涉及到环境迁移操作,而实际上需要测试人员去判断当前的测试版本是否需要迁移到UAT环境去供用户测试。同时测试人员在当前测试问题全部修复并关闭后可以对当前版本打配置基线操作。其次,对于用户测试提交的问题一般并不会在我们自己的缺陷管理系统进行Bug记录,因此用户反馈问题给测试人员,测试人员帮忙录入到缺陷管理系统,同时缺陷修改完成后测试先要验证没有问题,再通知用户进行验证,只有用户验证通过后缺陷才能够最终关闭。

    返回上页

    展开全文
  • 本文主要介绍Mesos和Marathon的搭建以及如何完成整个持续交付过程,以及后续还可以做哪些改进和加强。整个系统搭建完成后,应用代码的改变会自动触发Jenkins构建流程,几秒钟后,改变就会通过Jenkins、DockerHub和...
  • 微服务与持续交付

    2021-02-26 02:01:46
    本文节选自王磊著《微服务架构与实践》中的章节“微服务与持续交付”,介绍了持续交付是什么,以及微服务如何做到持续交付。十年以前,软件在一年之内的交付次数屈指可数。过去的十年间,交付的过程一直被不断地优化...
  • 第1章 持续交付:为什么需要持续交付,什么是持续交付 在本章中,你将了解到持续交付的核心概念,以及它能够带给开发人员、QA、运维和业务团队的好处。在开始改变工作方式之前,我们必须问一个重要的问题—为什么。...
  • 持续集成持续部署持续交付 有很多内容描述什么是持续集成,持续交付和持续部署。 但是这些过程首先要做什么? 了解正确使用CI和CD所解决的问题至关重要。 这将使您的团队可以改善您的流程。 并避免花力气追求那些...

    持续集成持续部署持续交付

    有很多内容描述什么是持续集成,持续交付和持续部署。 但是这些过程首先要做什么?

    了解正确使用CI和CD所解决的问题至关重要。 这将使您的团队可以改善您的流程。 并避免花力气追求那些不会给您的过程带来任何价值的幻想指标。

    持续集成是一个团队问题

    如果您在团队中工作,那么您是在同一个存储库上工作的多个开发人员。 存储库中有一个主分支,其中载有最新版本的代码。 开发人员在不同分支上从事不同的工作。 变更完成后,他会将其推送或合并到主分支。 最终,整个团队将拉动这一变化。

    我们要避免的情况是错误的提交使其进入了main分支。 错误意味着代码无法编译或应用程序无法启动或无法使用。 为什么? 不是因为应用程序损坏了,还是因为所有测试必须始终为绿色。 这不是问题,您可以永远不要部署该版本并等待修复。

    问题是您的整个团队都陷入了困境。 所有提出错误提交的开发人员都将花5分钟时间思考为什么它不起作用。 有些人可能会尝试查找错误的提交。 有些人会尝试与错误的代码作者并行解决问题。

    这对您的团队来说是浪费时间。 最糟糕的是,重复发生的事件加剧了对主分支机构的不信任,并鼓励开发人员分开工作。

    持续集成就是为了防止主分支被破坏,从而使您的团队不会陷入困境。 而已。 不是有所有测试的绿色所有的时间和主枝部署到生产的每一个承诺。

    持续集成的过程独立于任何工具。 您可以手动验证分支和主分支的合并在本地是否有效。 然后仅实际将合并推送到存储库。 现在那将是非常低效的。 这就是使用自动检查实现持续集成的原因。

    检查应确保最低限度:

    • 该应用程序应构建并启动
    • 最关键的功能应始终保持工作状态(用户注册/登录过程以及关键的业务功能)
    • 所有开发人员都依赖的应用程序的通用层应该是稳定的。 这意味着对这些零件进行单元测试。

    实际上,这意味着您需要提取适用于您的任何单元测试框架并保护应用程序的公共层。 有时,代码不是很多,可以很快完成。 另外,您还需要添加“烟雾测试”以验证代码是否已编译以及应用程序是否启动。 对于像Java Spring或.NET core这样具有疯狂依赖注入的技术,这尤其重要。 在大型项目中,很容易误解依赖项,因此必须确认该应用程序至少总是始终启动。

    如果您有成百上千的测试,则无需为每个合并运行所有测试。 这将花费大量时间,并且大多数测试可能会验证“非团队阻止者”功能。

    我们将在接下来的部分中看到连续交付的过程将如何充分利用这许多测试。

    与工具无关

    工具和自动检查都可以。 但是,如果您的开发人员仅合并他们工作了几个星期的巨型分支机构,那么他们将无济于事。 团队将花费大量时间合并分支并修复最终将出现的代码不兼容问题。 浪费时间就像被错误的提交阻塞一样。

    持续集成与工具无关。 这是关于小块工作并将新代码集成到主分支并频繁提取的问题。

    通常至少每天一次。 将您正在处理的任务拆分为较小的任务。 经常合并您的代码,并经常提取。 这样一来,没有人能分开工作超过一两天,问题就没有时间滚雪球了。

    一项大型任务不需要全部都在一个分支中。 应该永远不会。 将进行中的工作合并到主分支的技术称为“抽象分支”和“功能切换”。 有关更多详细信息,请参见博客文章“ 如何开始进行持续集成 ”。

    优质CI的关键点

    非常简单 保持简短。 最多3-7分钟 这与CPU和资源无关。 这与开发人员的生产力有关。 生产力的首要规则是专注。 做一件事,完成它,然后移到下一件事。

    上下文切换成本很高。 研究表明,当您被打扰时,大约需要23分钟才能重新专注于某件事。

    假设您推动分支以合并它。开始另一个任务。 您花了15到20分钟才能进入。 在您进入区域后的一分钟,您会从20分钟长的CI构建中收到针对先前任务的“构建失败”通知。 您回来修复它。 您再按一次。 您来回移动很容易超过20分钟。

    每天浪费一到两次的20分钟是您团队中开发人员的数量……这是浪费很多宝贵的时间。

    现在想象一下反馈在3分钟之内到来。 而且您知道会的。 您可能根本不会启动新任务。 您将有证据再次阅读您的代码,或者在等待时检查PR。 通知失败。 您将修复它。 然后继续下一个任务。 这就是您的流程应启用的焦点。

    保持CI的构建时间短,这是一个折衷方案。 在CI范围内运行时间更长或几乎没有价值的测试应移至CD步骤。 是的,那里的故障也需要修复。 但是,由于它们不会阻止任何人做他们的事情,因此您可以在完成工作后将这些修补程序作为“下一项任务”。 只需在工作时关闭通知并不时检查即可。 保持上下文切换到最小。

    持续交付和部署是工程问题

    让我们解决一下定义,以消除这些障碍。

    持续交付是指能够随时部署任何版本的代码。 实际上,它是指代码的最新版本。 您不会自动部署,通常是因为您不必或不受项目生命周期的限制。 但是只要有人愿意,就可以在最短的时间内完成部署。 有人可以成为想要在暂存或预生产环境中进行测试的测试/ QA团队。 或者实际上可能是时候将代码推向生产了。

    连续交付的想法是准备与您要在环境中运行的物品尽可能接近的文物。 如果使用Java,则可以是jar或war文件,如果使用.NET,则可以是可执行文件。 它们也可以是已转译的JS代码的文件夹,甚至是Docker容器的文件夹,无论使部署变得更短(即,您已经尽可能地预先构建了)。

    通过准备人工制品,我并不是要把代码变成人工制品。 这通常是一些脚本和执行时间。 准备方式:

    运行所有测试,以确保一旦部署,该代码便会真正起作用。 如果可以自动执行单元测试,集成测试,端到端测试,甚至性能测试。

    这样,您可以过滤主分支的哪些版本实际上已准备好生产,哪些尚未准备就绪。 理想的测试套件:

    • 确保应用程序关键功能正常工作。 理想情况下,所有功能
    • 确保没有引入性能破坏因素,因此当您的新版本受到众多用户的欢迎时,它就有机会持续
    • 空运行您的代码需要的任何数据库更新,以免出现意外

    它不需要非常快。 30分钟或1小时是可以接受的。

    持续部署是下一步。 您将最新和生产就绪版本的代码部署到某些环境。 如果您对CD测试套件足够信任,则是理想的生产方式。

    请注意,根据上下文,这并非总是可能或值得付出。 持续交付通常足以提高生产力。 特别是如果您在封闭的网络中工作并且环境有限,则可以部署到该环境。 也可能是软件的发布周期阻止了计划外的部署。

    持续交付和持续部署(从现在起将它们称为CD)不是团队问题。 他们的目的是在执行时间,维护工作和测试套件的相关性之间找到适当的平衡,以便能够说“此版本按预期运行”。 这是一个平衡。 如果您的测试持续30个小时,那就有问题了。 有关Oracle数据库测试套件的外观,请参见这篇史诗般的帖子 如果您花费大量时间使测试与最新代码保持最新,从而阻碍了团队的进步,那也不是一件好事。 而且,如果您的测试套件几乎没有任何保证,那基本上是没有用的。

    在理想的世界中,我们每次提交到主分支都需要1组可部署的工件。 您可以看到我们有一个垂直的可扩展性问题:我们从代码转移到工件的速度越快,我们就越准备好部署最新版本的代码。

    有什么大不同?

    持续集成是一个水平可伸缩性问题。 您希望开发人员经常合并其代码,因此检查必须快速。 理想情况下,几分钟之内就可以避免开发人员始终通过CI版本的高度异步反馈来切换上下文。

    您拥有的开发人员越多,则在所有活动分支上运行简单检查(构建和测试)所需的计算能力就越高。

    良好的CI构建:
    确保没有将破坏基本内容并阻止其他团队成员工作的代码引入主分支
    足够快,可以在几分钟内向开发人员提供反馈,以防止任务之间进行上下文切换

    持续交付和部署是垂直可伸缩性问题。 您需要执行一个相当复杂的操作。

    良好的CD版本:
    确保尽可能多的功能正常运行
    速度越快越好,但这不是速度问题。 30至60分钟的构建就可以了

    一个常见的误解是将CD视为诸如CI之类的水平可伸缩性问题:从代码移至工件的速度越快,实际处理的提交越多,并且越接近理想情况。 但是我们不需要。 尽可能快地为每次提交生产人工制品通常是过大的。 您可以尽最大的努力很好地使用CD:只有一个CD构建,它将在给定构建完成后立即选择最新提交进行验证。

    毫无疑问CD。 真的很难。 获得足够的测试信心才能说您的软件已准备好自动部署,通常可以在诸如API或简单UI之类的底层应用程序上使用。 在复杂的UI或大型整体系统上很难实现。

    结论

    用于执行CI和CD的工具和原理通常非常相似。 但是目标是非常不同的。

    持续集成是在反馈给开发人员的反馈速度与执行的检查(构建和测试)的相关性之间做出的折衷。 没有任何妨碍团队进度的代码应进入主分支。

    持续交付部署是要进行全面检查以发现代码问题。 检查的完整性是最重要的因素。 通常以测试的代码覆盖率或功能覆盖率来衡量。 尽早发现错误可以防止将损坏的代码部署到任何环境,并节省测试团队的宝贵时间。

    精心设计CI和CD版本以实现这些目标并保持团队的生产力。 没有工作流程是完美的。 问题会时不时发生。 每次使用它们时,都可以将其作为学习的经验教训来加强您的工作流程。

    最初发布在 Fire CI博客上

    翻译自: https://hackernoon.com/the-real-difference-between-ci-and-cd-smu363p

    持续集成持续部署持续交付

    展开全文
  • 持续集成&持续交付

    2020-04-20 14:23:32
    持续交付前言持续交付的概念和产生持续交付工具链Jenkins 2.0 新时代:从 CI 到 CD持续交付和Devops的关系 前言 随着微服务架构与容器虚拟化技术的发展,持续集成与持续交付的概念又重新回到了大家的视野,越来越多...
  • 经常会听到持续集成,持续交付,持续部署,三者究竟是什么,有何联系和区别呢?假如把开发工作流程分为以下几个阶段:编码->构建->集成->测试->交付->部署正如你在上图中看到,「持续集成(ContinuousIntegration)...
  • 持续集成持续部署持续交付 以下系列文章来自于我在Wix.com担任后端开发经理的经验。 我将尝试讲讲Wix的故事,以及我们如何看待和练习连续交付,希望它也能帮助您进行切换。 因此,您认为您的开发过程太慢了,于是...
  • [持续交付实践] 开篇:持续集成&持续交付综述 前言 随着微服务架构与容器虚拟化技术的发展,持续集成与持续交付的概念又重新回到了大家的视野,越来越多的公司开始使用持续集成的系统来解决频繁...
  • 第15章 持续交付和持续改进 在本书的最后一章中,你将回顾如何实施持续交付,再次关注核心的目标和挑战。作为一名Java开发人员,你需要不断地了解持续交付的最新实践经验,并且在整个软件交付和运维的过程中,不断...
  • 持续交付(英语:Continuousdelivery,缩写为CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得...
  • Devops持续交付

    2015-03-23 11:56:59
    Devops可以使持续交付更加成功, 更加敏捷,更加方便
  • 持续集成、持续交付、持续部署

    万次阅读 多人点赞 2018-11-27 12:56:23
    持续集成、持续交付、持续部署持续集成持续集成的优势持续交付持续部署DevOps总结参考资料 又到了例行的技术报告环节。想着在实验室里头絮絮叨叨的讲一些前端开发相关的内容,师兄师姐们不爱听,老大也会摆出经典的...
  • 第14章 迁移到持续交付 在本章之前,你已经学习了许多与持续交付相关的技术原理和实践。在本章中,你将了解将组织和团队迁移到持续交付要面临的挑战。此外,你还将了解到一些有助于迁移的最佳实践和方法。 持续交付...
  • 本文将使用一些免费的服务来为你的项目搭建持续交付平台,这些服务包括持续集成环境持续部署环境服务端应用托管基于Node的构建monitorHeroku的命令行工具TravisCI的命令行工具除此之外,我们在过程中编写的脚本还...
  • 有很多介绍什么是持续集成、持续交付和持续部署的内容。但是这些流程首先要做什么?了解CI和CD解决的问题以正确使用它们至关重要。这将使你的团队可以改善流程。并避免花力气追求那些不会给你的过程带来任何价值的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,408
精华内容 3,763
关键字:

持续交付