CI / CD:部署环境的原则

CI / CD: Principles for deployment of environments

我不是开发人员,但目前正在阅读 CI/CD。现在我想知道自动代码部署的良好做法。到目前为止,我阅读了很多有关将代码部署到现有环境的内容。

我现在的问题是使用例如一个 Jenkins 工作流程,用于在创建新构建时从头开始部署环境。例如,对于新创建的构建的测试,测试后再次删除环境。

我知道有多种插件可以与 AWS、Azure 等交互,可用于开发部署虚拟机的作业。 还有一些插件可以触发 Puppet 部署基础设施(作为代码),还有一些插件可以调用架构流程。 因此,在部署代码之前部署基础架构和中间件的一切都可用(当然需要一些额外的努力)。

这是现实生活中使用的东西吗?它是怎么做到的?

我的问题的背景是我对尽可能少点击的完全自动化开发感兴趣,以及通过没有闲置机器在按使用付费模式中节省成本。

My question now is whether it is also good-practice to use e.g. a Jenkins workflow to deploy an environment from scratch when a new build is created

是的,从头开始部署环境是一种很好的做法。正如您所说,Jenkins 和 Jenkins 管道当然可以根据您的具体要求帮助启动和编排该过程。从头开始部署一个完整的环境是最难实现自动化的事情之一,如果它是自动化的,则意味着很多其他事情也实现了自动化,例如基础设施、应用程序部署、应用程序配置等。

Is this something that is used in real life?

是的,绝对是。很多店都是这样做的。你的环境越简单,它就越容易,因此,只有一个后端应用程序的初创公司实现这种 valhalla 状态的困难相对较小。但即使是创建最复杂的环境——包含数百个相互依赖的应用程序——也可以完全自动化;只是需要更多的时间和精力。

The background of my question is my interest in full automation of development with as less clicks as possible and cost saving in a pay-per-use model by not having idling machines.

是的,绝对是。 "spin up and destroy" 策略有利于所有托管模型(因为在完全自动化之后,没有人需要等待某人手动配置环境),但是那些使用 public 云的人在成本方面看到了更大的好处(与总是离开 AWS 环境 运行 相比)。

I appreciate your thoughts.

没问题。我会建议这个问题不适合 Whosebug 的问题和答案超级好,因为它很笼统。将来,我会建议与您的开发人员聊天,找到对这类事情感兴趣的人,并在你们都陷入困境时提出更具体的问题。欢迎使用 Whosebug!

全部以各种组合使用; objective 是为最终用户提供持续的价值。我的两分钱:

构建与发布 这取决于您使用的是什么。我个人建议使用该工具提供的功能。例如,VSTS(Visual Studio 团队服务)提供完整的 CI/CD 管道。但是,如果您有只能由 Jenkins 满足的独特需求,那么您必须使用它,而 VSTS 提供了开箱即用的功能。

IAC(基础架构即代码) 除了 Puppet 等,您还可以利用 AZURE ARM(Azure 资源管理器)模板来构建和销毁环境。同样,看看您拥有的工具集有哪些开箱即用的功能。

按次付费 我个人使用的是 Azure Dev/Test 实验室,并通过 CI/CD 管道将代码部署到该实验室。稍后在 VM 上设置关闭策略,以便它根据提供的时间自动启动和自动关闭。这是一项很棒的功能,可以让您节省正在使用的资源和复制环境的成本。

例如,在 QA 签署之前可能不需要 UAT 环境。但是使用 IAC,您可以快速自动启动环境,然后通过一键式部署设置将代码部署到 UAT。