我们的解决方案由几个相互调用和支持的微服务组成。
为简化起见,请考虑以下依赖关系图:
MS1 --> MS2
--> MS3 --> MS4
- MS1 依赖于 MS2 和 MS3
- MS3 依赖于 MS4
- MS4独立
目标:部署期间的零停机时间
目前,我们正在分析解决以下几种情况的可能方法:
按顺序部署所有微服务,以确保所有端到端测试通过。这意味着首先部署 MS4,然后部署 MS3、MS2、MS1,然后运行测试(所有这些都在插槽中),如果一切通过则切换插槽
单独部署任何服务(其他根本没有改变),运行测试(再次插槽),然后如果一切成功则切换插槽
我们的第一种方法是使用单个(大)管道,每个微服务具有单独的阶段,并检查该微服务是否已更改以部署它。如果微服务没有检测到变化,那么我们想取消阶段并继续下一个阶段。此管道包含每个阶段的模板,例如:
- stage: MS1
jobs:
- job: CheckMS1Changes
steps:
- template: templates/ms1-check-changes.yml
- job: BuildMS1
dependsOn: CheckMS1Changes
displayName: Build MS1
- template: templates/ms1-build.yml
- job: ReleaseMS1
dependsOn: BuildMS1
displayName: Release MS1
- template: templates/ms1-release.yml
我们认为这将涵盖所描述的场景。“取消命令”应该放在 templates/ms1-check-changes.yml 文件中
问题是我们没有在文档中找到如何取消一个完整的阶段。这让我觉得也许我们的完整方法是错误的。我们还没有找到如何取消一个作业或一组作业,因为我们也怀疑我们是否应该为每个微服务设置阶段。
你可以看到,我们是新手。
您能否就所描述的场景提供一些建议?