在 CDKPipeline SynthAction 中配置运行时版本

Configure Runtime Versions in CDKPipeline SynthAction

我们正在通过 CDKPipeline 构造部署 Go Lambdas,并且需要编译 Go 代码作为合成步骤的一部分。

现在我们想更新到 1.15,这只有在我们使用新的 Codebuild Standard 5.0 时才有可能。 Codebuild 图像本身可通过 SimpleSynthOptions 字段 environment 配置。但是似乎没有直接的方法来传递运行时版本。这是引入的字段,定义在install:键下。 (https://docs.aws.amazon.com/codebuild/latest/userguide/sample-runtime-versions.html),但安装步骤在 SimpleSynthAction class.

中是完全不可配置的

我目前看到的唯一方法是覆盖SimpleSynthActionclass中的bind函数。从我所见,似乎也没有办法在 Synth 步骤之前引入单独的 Codebuild 步骤?

我是否忽略了任何选项,或者这真的是唯一的方法吗?如果是这样,是否值得提出一个功能请求,使运行时版本可配置为 synthAction 的一部分?

阅读一些 more docs 之后,我的问题自行解决了,因为如果没有给出运行时版本,则采用默认版本。所以当我更新到standard 5.0的时候,默认使用的是go 1.15

但是,为了定义其他运行时版本的一般目的,我将创建一个功能请求,因为目前似乎无法定义。

在最新的 CodePipeline API 中,您可以自定义构建规范:https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html#customizing-codebuild-projects

例如使用synthCodeBuildDefaults指定node js 14:

const pipeline = new CodePipeline(this, 'Pipeline', {
    synth: new ShellStep('Synth', {
        input: CodePipelineSource.codeCommit(repo, "mainline"),
        commands: [
            "npm ci",
            "npm run build",
            "cd packages/infrastructure",
            "npx cdk synth",
        ],
        primaryOutputDirectory: "packages/infrastructure/cdk.out",
    }),
    synthCodeBuildDefaults: {
        partialBuildSpec: BuildSpec.fromObject({
            phases: {
                install: {
                    "runtime-versions": {
                        nodejs: "14"
                    }
                }
            }
        })
    }
});