如何通过 CDK 引用 codepipeline 中的现有代码构建项目?

How can I reference an existing codebuild project in codepipeline via CDK?

我正在使用 AWS CDK 部署代码管道和代码构建。我目前正在做的是在一个 cloudformation 堆栈中创建代码构建,并在不同的 cf 堆栈中引用代码管道中的代码构建。

下面是我的代码,我创建了一个代码构建操作,例如:

    const action = new actions.CodeBuildAction({
          actionName: "MockEventBridge",
          type: actions.CodeBuildActionType.BUILD,
          input: input,
          project: new codebuild.PipelineProject(this, name, {
            projectName: mockName,
            environment: {
              computeType: codebuild.ComputeType.SMALL,
              buildImage
              privileged: true,
            },
            role,
            buildSpec: codebuild.BuildSpec.fromSourceFilename(
              "cicd/buildspec/mockEventbridge.yaml"
            ),
          }),
          runOrder: 1,
        })
    ...
    const stages = {
      stageName, actions: [action]
    }

构建动作后,我使用以下代码构建代码管道。

new codepipeline.Pipeline(this, name, {
      pipelineName: this.projectName,
      role,
      stages,
      artifactBucket
    });

问题是代码构建项目和代码流水线都构建在一个堆栈中。如果我在单独的 cf 堆栈中构建 codebuild 项目,我如何在 codepipeline 中引用此堆栈?

当查看 api 引用 https://docs.aws.amazon.com/cdk/api/v1/docs/@aws-cdk_aws-codepipeline.Pipeline.html 时,我找不到在 codepipeline 实例中引用 codebuild arn 的方法。

您可以使用 export 值导出在另一个 Stack 中创建的资源 Codebuild。 从第一个 Stack 导出的 CodeBuild 可以 import 到 CodePipeline 的新 Stack。

您可以查看此页面了解更多信息https://lzygo1995.medium.com/how-to-export-and-import-stack-output-values-in-cdk-ff3e066ca6fc

使用 codebuild.Project.fromProjectArn static method to import an external Project resource using its ARN. It returns an IProject, which is what your pipeline's actions.CodeBuildAction props expect.