您可以根据不同的管道停止一条Spinnaker管道吗?

时间:2019-02-12 20:30:58

标签: spinnaker

作为部署的一部分,我有两个管道。

  • 部署:该管道可烘烤Kubernetes清单并部署/测试包含金丝雀分析的容器。发布容器的新版本时将触发该事件。
  • 清理:此管道清理所有剩余的Canary部署混乱,并将所有网络/非容器组件重置为默认值。在部署管道成功或失败时触发。最后,如果其他情况处于不一致状态,请将它们重置为正常状态。

我将两个管道都设置为不允许同时运行-您无法在进行另一次清理时启动清理,也无法在已经运行另一部署的情况下启动部署。

但是,如果清理正在运行,我不希望开始部署。清理可能会错误地从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

在Deploy管道中,如果任何初始并行测试集均失败,则需要运行该清理-重置网络并杀死金丝雀。如果任何自动Canary Analysis运行失败,则需要运行清理。成功部署结束后,我需要运行清理操作,以确保那里没有剩余的金丝雀。

据我所知,工作流程并不是程序性的。我无法“清除”清理操作。我也确实非常不想将这五个步骤复制/粘贴到可能成功或失败的每个位置。我还想确保,如果其他操作失败(例如启用产品流量的步骤或其他操作),则清除运行。我并非总能找到一种简单的“挂入”的简单方法。

除了可以根据这些条件触发的单独管道之外,我还没有发现任何类型的“错误时执行此步骤集”或“成功时执行此步骤集” 。

我的理想解决方案是使用伪代码:

try {
  // do the deploy steps
}
finally {
  // whether success or fail
  // run the clean up steps
}

但是,鉴于我看到的无法在管道中进行尝试/最终操作的限制,每当Deploy完成(成功或失败)时,我都会触发Clean Up管道。但是,我看不出有什么可以阻止“清理”仍在运行时从启动中启动部署,因此,如果有一组备份更改都在等待部署,清理内容可能会清除我下面的内容

2 个答案:

答案 0 :(得分:0)

我不认为Spinnaker具有该特定功能,但是您可以做的一件事是让DeployClean Up阶段在同一管道的所有部分中并行运行,并且不允许并发运行。请参见下面的屏幕快照中的示例。

这样,如果DeployClean Up阶段已经在运行,则管道不应启动。如果您的金丝雀失败了,清理工作仍然应该进行。如果您的金丝雀通过了,清理工作仍将继续,并且将进行部署。

enter image description here

答案 1 :(得分:0)

我将部署和清理作为同一管道的一部分,并且在我认为可能出错的阶段(例如金丝雀分析阶段)添加了“忽略故障”。 Canary 分析之后的所有后续步骤都取决于 Canary 分析阶段,但清理阶段除外。因此,无论发生任何其他故障,我的清理工作都会发生。

第 1 步:在 Canary 分析阶段选择以下选项:

enter image description here

第 2 步:在后续步骤中添加一个条件,以确保它们仅在 Canary 分析阶段成功时运行。例如:

enter image description here

第 3 步: 确保清理阶段没有任何条件,这将确保它们无论如何都会运行。