What is CI/CD?

CI/CD是持续集成(CI)与持续交付或持续部署(CD)的组合实践。. CI/CD的目的是允许开发团队更频繁、更可靠地交付代码更改.

持续集成、持续交付和持续部署的区别是什么? 

CI/CD中的CI代表持续集成. 持续集成意味着开发人员经常将他们的代码更改合并到共享存储库中. 它是一个自动化的过程,允许多个开发人员在没有集成冲突的情况下为同一个项目贡献软件组件. 无论何时将软件更改集成到存储库中,CI都涉及自动测试.

CD既可以表示持续交付,也可以表示持续部署. 两者都涉及持续集成代码,并使其能够部署到QA或生产环境中. 持续部署将流程推进一步,并在环境中执行实际部署.

Why is CI/CD Important?

当代码库的大部分发生变化时,它会使应用程序的质量面临更高的风险. 这是因为更改越大,出现故障的可能性就越大——更改越大,故障排除就越困难. 敏捷组织经常集成他们的代码并执行自动化测试,以减少引入成本, identifying root causes, and fixing bugs.

Automation is key to CI. 没有人能够手动保持持续集成成功所需的速度. 开发人员需要频繁地进行集成,并需要尽快得到反馈.

持续交付和持续部署具有相似的目标, 因为他们使用自动化来减少时间, effort, 以及发布版本所涉及的风险. 持续交付快速高效. 每个构建都会在每个环境中自动进行测试, and if it passes, 只需单击一下即可手动部署代码. 准备工作是自动化的,但是生产的推进通常是由运营团队发起的. 

通过持续部署, 其中,到生产的发布是完全自动化的, 你放弃了一些控制权. 与此同时,您还获得了额外的优势. 您可以以比已经非常快的持续交付更高的速度进行开发, 因为您不需要为发布而暂停开发, 你的客户也会欣赏你不断的改进.

CI/CD的主要挑战是什么?

CI/CD的好处很多,但是实现这个过程可能会带来挑战. First, 而持续集成和持续交付/部署是相关的, 它们是CI/CD管道的不同部分. 当组织不理解其中的区别时, 他们最终可能会单独实现CI,并称之为CI/CD. For proper CI/CD, 您的持续代码集成(可能是使用特定于ci的工具完成的)需要提供给自动化的流程以进行测试和部署. 

CI/CD涉及许多参与者. 和所有DevOps方法一样, 它需要发展之间强有力的合作, QA, 以及运营团队(许多组织中的另一个挑战). 团队经常与开发、QA和运维所追求的看似矛盾的目标作斗争. 开发人员希望快速发布新代码并拥有创作自由. QA希望测试代码以最小化带有任何bug的版本. 运维部门希望代码以一种安全、准确和可控的方式发布和运行.

幸运的是,良好的CI/CD设置有助于这种类型的合作. 开发人员保持生产力和效率,因为他们不需要花太多时间调试, 操作人员可以放心,代码已经为发布做好了充分的准备. 从一个团队到另一个团队的交接是自动化的,而且不那么痛苦. For best results, 重要的是要确保每个人都清楚谁拥有管道的哪一部分以及整个过程. 

另一个挑战是了解如何实现新的CI/CD流程. Automation is essential, as frequent, 重复的流程可能会延迟CI/CD管道,并且如果手动完成,可能非常容易出错. 建议从一个小团队的自动化开始,向领导团队展示更广泛的自动化工作的成功. 

如今,安全性对每个组织来说都是一个挑战, 在DevOps过程中,安全措施往往是事后才想到的,而这些措施本应在开发初期就加以集成 软件开发生命周期 as possible. 通过这种方式,安全风险可以在修复成本较低的时候及早发现.

为什么要采用CI/CD模型?

CI/CD促进了更快的上市时间. 自动化简化了流程的某些部分, 而更快的错误检测可以减少灭火时间. 当你提供更定期的更新和积极的用户体验时,用户满意度也会提高. 

增量更改和CI的自动集成可以提高每次更新中的代码质量. 减少将错误代码推入生产环境的实例具有无数积极的业务影响.    

当速度和精度提高时,成本就会下降. 您的CI服务器可以在几秒钟内运行数百个测试,从而大大降低了测试成本. 毫无疑问,您有使用CI/CD的竞争对手, 如果你坚持传统的模式, you’ll be left behind.

如何在您的组织中开始CI/CD

向CI/CD的转换最好分阶段完成. 这允许开发人员学习和适应流程更改,并确保在将新流程引入生产系统之前对其进行全面测试.

要为CI/CD的成功做好准备,请从以下步骤开始:

  1. 将软件从开发人员的机器中移出——解决任何差异——到版本控制(VC)进程中, such as Git or SVN.
  2. 使用Vagrant或类似的工具构建本地开发人员实例,以便进行一些本地测试.
  3. 将代码推入VC和处理合并冲突的过程记录下来. 确保你的员工得到适当的培训.
  4. 根据需要将代码从VC进程迁移到您的生产环境中.

现在您已经建立了一个坚实的基础,可以在此基础上开始完整的CI/CD迁移, 你可以进入下一个阶段:

  1. 添加一个供开发人员推送的登台服务器. 这允许在生产之前进行未来的QA测试.
  2. 选择一个CI/CD工具,比如Jenkins,来自动化从登台到生产的推送. 你可以选择在这个时候介绍基本的绒毛.
  3. 从建立安全感开始 动态应用安全测试(DAST) solution, automated QA testing, 以及任何额外的编译步骤(例如最小化JavaScript), CSS, concatenating files, 检查软件来源 CVEs, etc.)

现在您拥有了一个功能性的CI/CD进程. Much of the security automation 会被软件执行吗, 但是,您的开发人员在软件和流程方面接受适当的培训是至关重要的.

阅读更多关于Web应用程序安全的信息

了解Rapid7的Web应用程序安全产品

DevOps安全:博客的最新消息