如何在AWS CDK流水线的不同阶段之间添加bake time(等待验证时间)
AWS CDK流水线多阶段添加Bake Time实现方案
核心实现逻辑
通过在流水线的相邻业务阶段之间插入官方提供的等待动作/步骤实现自定义时长的验证等待,无需额外开发自定义组件。
分场景实现步骤
场景1:使用原生aws-codepipeline模块构建流水线
- 首先导入依赖包(以TypeScript CDK为例,Python/Java等其他语言版本API逻辑一致)
import { WaitAction, WaitTime } from 'aws-cdk-lib/aws-codepipeline-actions'; import { Duration } from 'aws-cdk-lib';
- 在需要添加bake time的两个阶段之间插入独立的等待阶段,示例为在gamma测试阶段和生产阶段之间添加2小时等待:
// 插入bake阶段 const bakeStage = pipeline.addStage({ stageName: 'Bake-Gamma-To-Prod' }); // 添加等待动作,自定义时长 bakeStage.addAction(new WaitAction({ actionName: 'Bake-Verification-Wait', waitTime: WaitTime.duration(Duration.hours(2)) }));
等待时长支持自定义,最小单位为秒,最长可配置99天
场景2:使用CDK Pipelines高级封装(@aws-cdk/pipelines模块)
大部分无服务器应用开发者会使用该高级封装简化流水线配置,可直接通过WaitStep实现:
- 导入依赖
import { WaitStep, CodePipeline } from 'aws-cdk-lib/pipelines'; import { Duration } from 'aws-cdk-lib';
- 在阶段的后置步骤中添加等待,示例为beta到gamma加30分钟等待,gamma到生产加2小时等待:
const pipeline = new CodePipeline(this, 'ServerlessAppPipeline', { // 你的流水线基础配置(synth、源设置等) }); // 添加beta测试阶段 const betaStage = pipeline.addStage(new BetaTestStage(this, 'Beta')); // beta阶段完成后进入等待 betaStage.addPost(new WaitStep('Bake-Beta-To-Gamma', { time: Duration.minutes(30) })); // 添加gamma测试阶段 const gammaStage = pipeline.addStage(new GammaTestStage(this, 'Gamma')); // gamma阶段完成后进入等待 gammaStage.addPost(new WaitStep('Bake-Gamma-To-Prod', { time: Duration.hours(2) })); // 最后添加生产阶段 pipeline.addStage(new ProdStage(this, 'Production'));
可选扩展配置
如果需要支持等待过程中发现问题随时终止流水线,可以在bake阶段并行添加手动拒绝动作:
实现逻辑:等待时长结束自动进入下一阶段,若验证期间发现问题可手动触发审批拒绝终止流程
import { ManualApprovalAction } from 'aws-cdk-lib/aws-codepipeline-actions'; const bakeStage = pipeline.addStage({ stageName: 'Bake-Gamma-To-Prod' }); // 等待动作和手动审批动作同优先级并行运行 bakeStage.addAction(new WaitAction({ actionName: 'Wait-For-Bake', waitTime: WaitTime.duration(Duration.hours(2)), runOrder: 1 })); bakeStage.addAction(new ManualApprovalAction({ actionName: 'Stop-If-Bake-Failed', runOrder: 1 }));
内容的提问来源于stack exchange,提问作者Usama Ali
相关产品推荐
相关产品推荐

