【问题标题】:使用不同参数从 CodePipeline 调用 AWS CodeBuild 项目
【发布时间】:2022-01-23 12:10:14
【问题描述】:

假设我们有一个具有以下两个阶段的 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. 更新/部署 lambda 函数 (aws lambda update-function-code)。

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

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

【问题讨论】:

    标签: node.js typescript amazon-web-services aws-cdk aws-codebuild


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-18
        • 1970-01-01
        • 2019-12-15
        • 2022-11-19
        • 2018-09-10
        • 2020-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多