网站搜索

javascript - 在 CDK CodePipelines 中添加手动审批阶段


我一直在使用 AWS CDK,我认为这是使用 AWS 的一种很好的方式。最近我遇到了一个问题,无法解决。我查阅了文档和资源,但没有任何资料解释如何在 CDK 中实现。所以我有两个代码管道,每个管道要么部署到暂存环境,要么部署到生产环境。现在我希望在代码部署到生产环境之前增加一个手动审批阶段。我会在下面展示我的简单代码以供参考:

import * as cdk from '@aws-cdk/core';
import { AppsPluginsCdkStack } from './apps-plugins-services/stack';
import {
  CodePipeline,
  ShellStep,
  CodePipelineSource
} from '@aws-cdk/pipelines';

class ApplicationStage extends cdk.Stage {
  constructor(scope: cdk.Construct, id: string) {
    super(scope, id);
    new CdkStack(this, 'cdkStack');
  }
}

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

    //Create the CDK Production Pipeline
    const prodPipeline = new CodePipeline(this, 'ProductionPipeline', {
      pipelineName: 'ProdPipeline',
      synth: new ShellStep('ProdSynth', {
        // Use a connection created using the AWS console to authenticate to GitHub
        input: CodePipelineSource.connection(
          'fahigm/cdk-repo',
          'develop',
          {
            connectionArn:
              'AWS-CONNECTION-ARN' // Created using the AWS console
          }
        ),
        commands: ['npm ci', 'npm run build', 'npx cdk synth']
      })
    });

    prodPipeline.addStage(new ApplicationStage(this, 'Production'));
  }
}

class StagingPipelineStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);
    //Create the CDK Staging Pipeline
    const stagePipeline = new CodePipeline(this, 'StagingPipeline', {
      pipelineName: 'StagePipeline',
      synth: new ShellStep('StageSynth', {
        // Use a connection created using the AWS console to authenticate to GitHub
        input: CodePipelineSource.connection(
          'fahigm/cdk-repo',
          'master',
          {
            connectionArn:
              'AWS-CONNECTION-ARN' // Created using the AWS console
          }
        ),
        commands: ['npm ci', 'npm run build', 'npx cdk synth']
      })
    });

    stagePipeline.addStage(new ApplicationStage(this, 'Staging'));
  }
}
//
const app = new cdk.App();

new ProductionPipelineStack(app, 'ProductionCDKPipeline', {
  env: { account: 'ACCOUNT', region: 'REGION' }
});

new StagingPipelineStack(app, 'StagingCDKPipeline', {
  env: { account: 'ACCOUNT', region: 'REGION' }
});

app.synth();

现在我不知道从这里该往哪里走。文档只讲了如何从控制台操作,但我想把它添加到代码中。非常感谢任何帮助!

答案#1

CDK 文档实际上并没有讲如何从控制台操作,它讲的是如何使用 CDK,并提供了示例。这里有一个直接来自文档的示例:

以下示例显示了以 ShellStep 形式的自动审批,以及以 ManualApprovalStep 形式添加到管道的手动审批。两者都必须通过,才能从 PreProd 环境推广到 Prod 环境:

declare const pipeline: pipelines.CodePipeline;
const preprod = new MyApplicationStage(this, 'PreProd');
const prod = new MyApplicationStage(this, 'Prod');

pipeline.addStage(preprod, {
  post: [
    new pipelines.ShellStep('Validate Endpoint', {
      commands: ['curl -Ssf https://my.webservice.com/'],
    }),
  ],
});
pipeline.addStage(prod, {
  pre: [
    new pipelines.ManualApprovalStep('PromoteToProd'),
  ],
});

这是关于手动审批步骤的文档:https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_pipelines.ManualApprovalStep.html