spinnaker - 您能否根据正在运行的不同管道停止一个 Spinnaker 管道?
问题描述
作为部署的一部分,我有两个管道。
- 部署:此管道烘焙 Kubernetes 清单并部署/测试容器,包括金丝雀分析。当容器的新版本发布时触发。
- 清理:此管道清理任何剩余的金丝雀部署混乱并将所有网络/非容器组件重置为默认值。它在部署管道成功或失败时触发。最后,如果它们处于不一致的状态,请将它们重置为正常状态。
我将两个管道都设置为不允许并发运行 - 当另一个清理正在进行时你不能开始清理,你不能在另一个部署已经运行的情况下开始部署。
但是,如果 Clean Up 正在运行,我不希望启动 Deploy。Clean Up 可能会错误地从 Deploy 下重置事物并导致它失败,或者更糟糕的是,错误地成功。
如何确保仅在 Clean Up 未运行且没有其他 Deploy 运行时才运行 Deploy?
更新:我认识到这可能都是一个管道的一部分,但是,为了澄清为什么这些是单独的管道,让我添加上下文。
部署管道有大约 20 个步骤,其中一些是并行运行的。一种简化的看法是:
Bake and Deploy
Manifest as Canary
|
+------+------+
| | |
Tests Tests Tests
| | |
+------+------+
|
Enable Some Prod Traffic
|
+------+------+
| | |
Tests Tests Tests
| | |
+------+------+
|
Enable More Prod Traffic
|
Automated Canary Analysis
|
Enable More Prod Traffic
|
Automated Canary Analysis
|
Finish Rolling New Version
Into Production
清理有大约五个步骤,但归结为:
Ensure No Network Traffic Remains
Pointed at Canary Instances (Reset
Networking)
|
Delete Any Remaining Canary Instances
在部署管道中,如果任何初始并行测试集失败,我需要运行该清理 - 重置网络并终止金丝雀。如果任一自动 Canary 分析运行失败,我需要运行清理。在成功部署结束时......我需要运行清理以确保那里没有剩余的金丝雀东西。
据我所知,工作流程并不是真正的程序化。我不能“转到”清理。我也真的,真的不想将这组五个步骤复制/粘贴到它可能成功或失败的每个地方。我还想确保如果其他事情失败 - 也许是启用 prod 流量的步骤或其他事情 - 清理运行。我并不总是有一种简单的方法来“吸引”我能找到的。
除了可以根据这些条件触发的单独管道之外,我还没有找到任何类型的“出错时,执行这组步骤”或“成功时,执行这组步骤” 。
我理想的解决方案是伪代码:
try {
// do the deploy steps
}
finally {
// whether success or fail
// run the clean up steps
}
但是,鉴于我看到无法在管道中尝试/最终的限制,每当部署完成(成功或失败)时,我都会触发清理管道。但是,当清理仍在运行时,我看不到任何东西可以“阻止”部署启动,所以如果有一组备份的更改都在等待部署,清理的东西可能会从我下面清理掉.
解决方案
推荐阅读
- python - django.template.exceptions.TemplateDoesNotExist: home.html
- mysql - HikariCP 尝试使用与提供的用户 ID 不同的池连接
- android - 我在反应原生时出错 null is not an object ''evalating _ReanimatedModule.default.configureProps'
- java - Wildfly 上的部署因 java.lang.NoSuchMethodError 而失败
- python - 在python中将文本文件转换为.xlsx
- java - 什么是从简单 Java 对象(POJO)的 getter 到 setter 映射的好方法。可以使用反射吗?
- angular - 网页不可用 - com.googlecontent.apps... 的网页无法加载,因为 ERR_UNKNOWN_URL_SCHEME
- sql - 追踪插入错误的最简单方法是什么?
- python-3.x - 如何在机器学习模型之前转换、编码或标准化每行包含(项目)列表的列?
- java - 带有 spring-data JPA 删除方法的 ClassCastException