AWS CDK CodePipeline 在 Source 和 Build 之间添加一个阶段

AWS CDK CodePipeline add a stage between Source and Build

我按照 Continuous integration and delivery (CI/CD) using CDK Pipelines 指南实施了 CodePipeline。我想知道如何在 CDK 中向我的管道添加一个阶段,该阶段将 运行 在 Source 阶段之后但在 Build 阶段之前。

这是我的管道代码:

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { Repository } from 'aws-cdk-lib/aws-codecommit';
import { CodePipeline, CodePipelineSource, ShellStep } from 'aws-cdk-lib/pipelines';

export class MyPipelineStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const repo = Repository.fromRepositoryName(this, 'CogClientRepo', 'cog-client');

    const pipeline = new CodePipeline(this, 'Pipeline', {
      pipelineName: 'MyPipeline',
      synth: new ShellStep('Synth', {
        input: CodePipelineSource.codeCommit(repo, 'main'),
        commands: ['npm ci', 'npm run build', 'npx cdk synth']
      })
    });
  }
}

在 运行ning cdk deploy 之后,我看到我可以使用控制台在 SourceBuild 之间添加一个阶段,但我希望这是一部分的 CDK 代码。

用 TypeScript 编写的 CDK 版本 2.3.0
我正在使用更新的 aws-cdk-lib.pipelines module and not the aws-cdk-lib.aws_codepipeline 模块。

因此,CDK 确定将您创建的动作放在哪里的方式是通过它们的输入和输出。要在源和构建之间添加一个动作,您需要创建一个动作(或一系列动作),将源输出作为输入,并生成一个由合成步骤用作输入的输出。

下面是 Python 中的示例,它在 TS 中的工作方式相同:

my_source_action = CodePipelineSource.code_commit(repo, "main")

my_intermediary_action = CodeBuildStep("myAction", input=my_source_action)

my_synth_action = ShellStep(
    "Synth",
    input=my_intermediary_action,
    commands=['...']
)