问题描述
在阅读Puppet Labs的年度DevOps报告时,对其中的数据产生了疑问。他想知道是否可以将2016年和2017年的数据相乘,以及这些数据是否意味着交付速度真的如此之快。他还提到了一些关于轻量级微服务的假设条件,想知道这些条件是否适用于这些数据。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据回答1中的解释,这些数据并不是指实际的验证时间在减少。实际上,验证过程本身可以是一个处理流水线,其中每个变更集的平均/有效验证时间可以减少到非常小的量。
例如,处理流水线可以同时处理多个变更集。如果你有60个提议的变更集,每个变更集都触及存储库中的不同文件,你可以将它们合并为一个等效的超级变更集,触及60个文件。然后,你可以通过一个需要1小时的验证步骤来处理这个超级变更集。如果验证通过,你将获得60倍的加速因子,每个变更集的有效验证时间为1分钟,即使实际验证时间为1小时。当验证失败并且需要执行二分法来确定错误的变更集时,你将失去一部分加速。
或者,你可以独立验证每个变更集,通过60个1小时的并行验证。同样的有效验证时间,但验证资源使用率更高。
我想要表达的观点是,有一些构建处理流水线的方法可以大大减少每个变更集的有效验证时间,同时保持非常大规模项目的敏捷性。
另一个要考虑的问题是分支策略。那6个月并不是实际的验证时间。大部分时间只是在导航分支的迷宫和与集成地狱作斗争,只是为了将修复传播到正确的发布分支 – 这是当时被认为是正常的瀑布式开发模型的影响。
如今,持续集成/持续交付(正确的那种,而不是持续集成剧院)和基于主干的开发消除了所有这些浪费的时间/精力和绕过,修复从集成到主干后几乎立即准备好交付 – 没有任何不可预测的大规模分支合并障碍阻碍交付。
方案2
请注意以下操作注意版本差异及修改前做好备份。
另一种方法是使用脚本或工具来控制容器的运行顺序。你可以使用docker run
命令来手动控制容器的启动顺序,或者使用一些第三方工具来管理容器的依赖关系。
以下是一个简单的bash脚本示例,可以在容器A启动后启动容器B:
#!/bin/bash
# 启动容器A
docker run -d --name container_a your_image_a
# 等待容器A完全启动
while ! docker exec container_a echo "Container A is ready"; do
sleep 1
done
# 启动容器B
docker run -d --name container_b your_image_b
在这个示例中,我们首先使用docker run
命令启动容器A,并将其命名为container_a
。然后,使用一个循环来等待容器A完全启动(这里是通过在容器内运行echo
命令来测试)。一旦容器A就绪,我们再使用docker run
命令启动容器B,并将其命名为container_b
。