AWS CDK CodePipeline 在源代码和构建之间添加一个阶段

888*_*888 4 amazon-web-services typescript aws-codepipeline aws-codebuild aws-cdk

我遵循使用 CDK Pipelines 的持续集成和交付 (CI/CD)指南来实现 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']
      })
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

运行后,cdk deploy我发现我可以在控制台SourceBuild使用控制台之间添加一个阶段,但我希望它成为 CDK 代码的一部分。 显示两个阶段的 AWS CodePipeline 控制台

用 TypeScript 编写的 CDK 版本 2.3.0
我使用的是更新的aws-cdk-lib.pipelines模块,而不是aws-cdk-lib.aws_codepipeline模块。

gsh*_*hka 6

因此,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=['...']
)
Run Code Online (Sandbox Code Playgroud)

  • 对于任何尝试此操作的人来说,重要的一点是,如果您在定义“my_intermediary_action”时犯了错误,导致它每次都失败,您将无法通过管道推送修复,因为合成和自我变异步骤在其之后。 (4认同)