使用不同参数从 CodePipeline 调用 AWS CodeBuild 项目

Call AWS CodeBuild project from CodePipeline with different parameters

假设我们有一个具有 2 个阶段的 CodePipeline,如下所示:

new codepipeline.Pipeline(this, name + "Pipeline", {
    pipelineName: this.projectName + "-" + name,
    crossAccountKeys: false,
    stages: [{
        stageName: 'Source',
        actions: [codeCommitSourceAction]
    },{
        stageName: 'Build',
        actions: [buildAction]
    }]
});

Source 阶段是我们从存储库中提取更改的地方,Build 阶段是一个 CodeBuild 项目,它具有以下内容buildspec 文件中的操作:

  1. 安装依赖项(npm i)。
  2. 运行 测试 (npm run test).
  3. 打包项目(npm run pack)。
  4. Update/deploy lambda 函数 (aws lambda update-function-code).

一般来说,它会做它应该做的事情,但是,如果构建失败,找出失败部分的唯一方法是查看日志。我希望它可以直接从 CodePipeline 中看到。在这种情况下,CodePipeline 必须有更多阶段,这些阶段与 CodeBuild 中的每个操作相关联。根据我的经验,如果我为每个阶段提供不同的 CodeBuild 项目,我可以做到。

问题:我能否为不同的 CodePipeline 阶段提供相同的 CodeBuild 项目,以便它只执行部分构建规范文件(例如,仅 运行 测试)?

Question: can I provide same CodeBuild project to the different CodePipeline stages so, that it will execute only part of buildspec file (for example, only running the tests)?

不,我不认为这是可能的。

但是,您可以做的是在管道的不同阶段调用不同的 buildspecs.yml 文件。

例如,您可以有一个名为 InitCodepipeline 阶段,它将调用项目的 builspec_init.yml。如果成功,您可以有以下状态 Apply 调用项目的 buildspec_apply.yml 文件。

您可以让 buildspec.yml 根据环境变量执行不同的操作。然后,您可以将不同的环境变量传递给 CodeBuildAction with environmentVariables.

new codepipeline_actions.CodeBuildAction({
  actionName: 'Build',
  project: buildProject,
  input: sourceInput,
  runOrder: 1,
  environmentVariables: {
    STEP: { value: 'test' }
  }
}),

然后检查buildspec.yml中的STEP环境变量。