如何在 cdk 中编写 buildspec yaml 代码
How to writing the buildspec yaml code in cdk
我用 cdk 进行代码构建
它可以接受构建规范作为 yaml,但是,我如何在 cdk 中做同样的事情?
我想做的是这样的,当然不行,
我强行把yaml代码放在commands里
const buildProject = new codebuild.PipelineProject(this, 'project', {
environment: {// I guess I need to select ubuntu and image 4.0},
buildSpec: codebuild.BuildSpec.fromObject({
version: '0.2',
phases: {
build: {
commands:['
version: 0.2
phases:
install:
runtime-versions:
docker: 18
build:
commands:
- apt-get install jq -y
- ContainerName="tnkDjangoContainer"
- ImageURI=$(cat imageDetail.json | jq -r '.ImageURI')
- printf '[{"name":"CONTAINER_NAME","imageUri":"IMAGE_URI"}]' > imagedefinitions.json
- sed -i -e "s|CONTAINER_NAME|$ContainerName|g" imagedefinitions.json
- sed -i -e "s|IMAGE_URI|$ImageURI|g" imagedefinitions.json
- cat imagedefinitions.json
artifacts:
files:
- imagedefinitions.json
',
],
},
}
})
});
而且我想我需要选择图像来执行构建规范,例如 Ubuntu
我在哪里可以设置这些?
CDK 未公开在 synth-time 处内联 YAML 构建规范的方法。您可以通过将现有 YAML 解析为 JS 对象并将结果传递给 BuildSpec.fromObject
.
来自己完成此操作
CDK 的 codebuild.Project
为您提供了其他几种方法来提供 buildSpec
:
BuildSpec.fromObject
从 synth-time 处的 key-value 对中内联构建规范。它应该遵循 CodeBuild buildspec format。 CDK 将在 CloudFormation 模板中输出一个字符串化的 JSON buildspec。如果您希望 CDK 改为输出 YAML,请使用 fromObjectToYaml
。这两种方法都将 key-value 对(类型:[key: string]: any;
)作为输入,因此 TS 无法提供太多类型检查帮助。
BuildSpec.fromSourceFilename
告诉 CodeBuild 使用构建规范文件 in your source at run-time。文件名在 CloudFormation 模板中传递。
这是一个使用 yaml 包将 YAML 字符串解析为内联 YAML 输出的示例。请注意,环境是在构建规范之外定义的:
import * as yaml from 'yaml';
const fromYaml = yaml.parse(`
version: '0.2'
phases:
build:
commands:
- npm run build
`);
new codebuild.Project(this, 'YamlInYamlOutProject', {
environment: {
buildImage: codebuild.LinuxBuildImage.STANDARD_5_0, // Ubuntu Standard 5
},
buildSpec: codebuild.BuildSpec.fromObjectToYaml(fromYaml),
});
我用 cdk 进行代码构建
它可以接受构建规范作为 yaml,但是,我如何在 cdk 中做同样的事情?
我想做的是这样的,当然不行,
我强行把yaml代码放在commands里
const buildProject = new codebuild.PipelineProject(this, 'project', {
environment: {// I guess I need to select ubuntu and image 4.0},
buildSpec: codebuild.BuildSpec.fromObject({
version: '0.2',
phases: {
build: {
commands:['
version: 0.2
phases:
install:
runtime-versions:
docker: 18
build:
commands:
- apt-get install jq -y
- ContainerName="tnkDjangoContainer"
- ImageURI=$(cat imageDetail.json | jq -r '.ImageURI')
- printf '[{"name":"CONTAINER_NAME","imageUri":"IMAGE_URI"}]' > imagedefinitions.json
- sed -i -e "s|CONTAINER_NAME|$ContainerName|g" imagedefinitions.json
- sed -i -e "s|IMAGE_URI|$ImageURI|g" imagedefinitions.json
- cat imagedefinitions.json
artifacts:
files:
- imagedefinitions.json
',
],
},
}
})
});
而且我想我需要选择图像来执行构建规范,例如 Ubuntu
我在哪里可以设置这些?
CDK 未公开在 synth-time 处内联 YAML 构建规范的方法。您可以通过将现有 YAML 解析为 JS 对象并将结果传递给 BuildSpec.fromObject
.
CDK 的 codebuild.Project
为您提供了其他几种方法来提供 buildSpec
:
BuildSpec.fromObject
从 synth-time 处的 key-value 对中内联构建规范。它应该遵循 CodeBuild buildspec format。 CDK 将在 CloudFormation 模板中输出一个字符串化的 JSON buildspec。如果您希望 CDK 改为输出 YAML,请使用fromObjectToYaml
。这两种方法都将 key-value 对(类型:[key: string]: any;
)作为输入,因此 TS 无法提供太多类型检查帮助。BuildSpec.fromSourceFilename
告诉 CodeBuild 使用构建规范文件 in your source at run-time。文件名在 CloudFormation 模板中传递。
这是一个使用 yaml 包将 YAML 字符串解析为内联 YAML 输出的示例。请注意,环境是在构建规范之外定义的:
import * as yaml from 'yaml';
const fromYaml = yaml.parse(`
version: '0.2'
phases:
build:
commands:
- npm run build
`);
new codebuild.Project(this, 'YamlInYamlOutProject', {
environment: {
buildImage: codebuild.LinuxBuildImage.STANDARD_5_0, // Ubuntu Standard 5
},
buildSpec: codebuild.BuildSpec.fromObjectToYaml(fromYaml),
});