构建自动化流程
Build Automation Process
这是关于与应用程序构建相关的最佳实践。我们遵循 git flow 的发展原则。我们用竹子来建造,但这并不重要。我的问题是,通常情况下,计划构建、自动构建或手动构建哪个更好?我个人认为自动或手动构建是可行的方法,原因如下。
自动构建将轮询特定分支(很可能是开发分支),当它检测到更改时将启动构建。这很棒,因为您总是在有新代码要构建时创建构建。不好的一面是,如果你有一个 5 人的团队,并且每个人都在 1 分钟后将他们的功能分支合并到开发中,那么你将有 5 个不同的构建。
这让我明白为什么我认为手动构建是最好的。一旦您获得了每个人的更改,您就可以开始构建。这将使构建数量保持较小。
SO 如何看待这些选项?哪个是高效 CI/CD 团队的标准行业惯例?
我认为关于您如何管理构建的任何意见都取决于您在过程中重视什么,而您的问题并不清楚。
顺便说一句;大多数构建系统不需要为每次提交都进行不同的构建。如果您在轮询间隔内有多个开发提交,您应该能够 test/deploy 将它们全部作为一个构建。这对你来说可能是好事也可能是坏事。
持续集成
持续集成应该为您提供更顺畅和更快的开发过程,并确保您的项目处于可发布状态(或至少通过其自己的测试,希望是同一件事)。我发现手动构建通常无法实现相同的质量水平。提交重大更改太容易了"knowing",它将在下一次手动构建之前修复,然后开始越来越远,或者当构建确实失败时,突然不清楚是几个更改中的哪一个导致了失败。对于持续集成,我不仅希望自动构建您的开发分支,而且希望自动构建每个功能分支,表明它们在合并到开发之前通过了您的测试。
在许多环境中,与开发团队的时间成本相比,CI 构建的成本可以忽略不计。例如,我目前正在查看一个项目,在过去 4 年左右的时间里平均有大约 5 个活跃的提交者并且每天只有 12 个构建。保持测试的快速和可靠并不容易,但 运行 大量构建(同时在功能分支的情况下)应该是。
在某些环境中,测试构建的过程既不便宜也不快速,例如您需要 运行 需要数小时的硬件测试或性能测试。在这些情况下,您需要一种不同的方法,但您实际上也可能无法实践持续集成,您的 development/branching 策略应该反映出这一点。
持续交付
持续交付更进一步,通过部署所有这些可发布的构建,缩短了从开发到更改到达用户的周期时间。如果在发布(或回滚)这些构建的过程中有一个手动步骤,那么我认为您不应该调用您的过程 "continuous delivery".
你可以有一个非常好的自动化部署过程,而不需要它是连续的。持续交付对于某些产品可能非常有价值,但也可能具有破坏性并且不适合其他产品。例如,我们目前持续部署到面向消费者的 Web 应用程序。我们还维护后端操作工具,我们对何时发布(或至少何时启用新功能)更为保守,因为对这些工具的更改可能会引入新的工作流程,我们不希望在没有警告的情况下出现在某人的轮班中间.
tl;dr
自动化一切,不要因为试图保持少量构建而拖慢你的团队。
这是关于与应用程序构建相关的最佳实践。我们遵循 git flow 的发展原则。我们用竹子来建造,但这并不重要。我的问题是,通常情况下,计划构建、自动构建或手动构建哪个更好?我个人认为自动或手动构建是可行的方法,原因如下。
自动构建将轮询特定分支(很可能是开发分支),当它检测到更改时将启动构建。这很棒,因为您总是在有新代码要构建时创建构建。不好的一面是,如果你有一个 5 人的团队,并且每个人都在 1 分钟后将他们的功能分支合并到开发中,那么你将有 5 个不同的构建。
这让我明白为什么我认为手动构建是最好的。一旦您获得了每个人的更改,您就可以开始构建。这将使构建数量保持较小。
SO 如何看待这些选项?哪个是高效 CI/CD 团队的标准行业惯例?
我认为关于您如何管理构建的任何意见都取决于您在过程中重视什么,而您的问题并不清楚。
顺便说一句;大多数构建系统不需要为每次提交都进行不同的构建。如果您在轮询间隔内有多个开发提交,您应该能够 test/deploy 将它们全部作为一个构建。这对你来说可能是好事也可能是坏事。
持续集成
持续集成应该为您提供更顺畅和更快的开发过程,并确保您的项目处于可发布状态(或至少通过其自己的测试,希望是同一件事)。我发现手动构建通常无法实现相同的质量水平。提交重大更改太容易了"knowing",它将在下一次手动构建之前修复,然后开始越来越远,或者当构建确实失败时,突然不清楚是几个更改中的哪一个导致了失败。对于持续集成,我不仅希望自动构建您的开发分支,而且希望自动构建每个功能分支,表明它们在合并到开发之前通过了您的测试。
在许多环境中,与开发团队的时间成本相比,CI 构建的成本可以忽略不计。例如,我目前正在查看一个项目,在过去 4 年左右的时间里平均有大约 5 个活跃的提交者并且每天只有 12 个构建。保持测试的快速和可靠并不容易,但 运行 大量构建(同时在功能分支的情况下)应该是。
在某些环境中,测试构建的过程既不便宜也不快速,例如您需要 运行 需要数小时的硬件测试或性能测试。在这些情况下,您需要一种不同的方法,但您实际上也可能无法实践持续集成,您的 development/branching 策略应该反映出这一点。
持续交付
持续交付更进一步,通过部署所有这些可发布的构建,缩短了从开发到更改到达用户的周期时间。如果在发布(或回滚)这些构建的过程中有一个手动步骤,那么我认为您不应该调用您的过程 "continuous delivery".
你可以有一个非常好的自动化部署过程,而不需要它是连续的。持续交付对于某些产品可能非常有价值,但也可能具有破坏性并且不适合其他产品。例如,我们目前持续部署到面向消费者的 Web 应用程序。我们还维护后端操作工具,我们对何时发布(或至少何时启用新功能)更为保守,因为对这些工具的更改可能会引入新的工作流程,我们不希望在没有警告的情况下出现在某人的轮班中间.
tl;dr
自动化一切,不要因为试图保持少量构建而拖慢你的团队。