我有一个Spinnaker部署管道,当在Docker注册表中更新Docker Image D1或Docker Image D2时触发。
管道有多个阶段,其中D1在阶段S1部署,如果成功,则D2在阶段S2部署。
我看到的是,取决于更新哪个图像,只有一个阶段成功。另一阶段导致K8S中出现ImagePullBackOff错误。
问题似乎是,对于触发(例如D1)管道的图像更改,将提取正确版本的图像,对于其他阶段,将使用“:latest”标记来提取图像,而该标记不会在Docker注册表中不存在。
关于如何设置的任何想法?
答案 0 :(得分:0)
首先,最好建立2条管道。如果没有,那么...
您的管道应如下所示:
Config -- Deploy #1
\- Deploy #2
有多少个触发器都没关系-只有一个触发器将提供工件。 这样您就能得到类似的东西:
${trigger['artifacts'][0]['name']}
它将为您提供一个带有您的Docker映像名称的字符串,例如docker-registry.com/org/app
。
使用此信息,您可以在json中使用Conditional on Expression
启用部署阶段,就像这样:
"stageEnabled": {
"expression": "${trigger['artifacts'][0]['name'].contains('app')}",
"type": "expression"
},
条件已解析为false
的部署阶段将被跳过。