我用cdk做代码构建
它可以接受作为yaml的buildspec,但是,我如何在cdk中做同样的事情呢?
我想做的就是这样,当然不管用,
我强行将yaml代码放入命令中。
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
。
我可以把这些放在哪里?
发布于 2022-03-09 10:49:34
CDK不公开在同步时内联YAML构建规范的方法.您可以通过将现有的YAML解析为JS对象并将结果传递给BuildSpec.fromObject
来实现这一点。
CDK的codebuild.Project
为您提供了几种提供buildSpec
的其他方法
BuildSpec.fromObject
从同步时的键值对中插入构建规范.它应该遵循CodeBuild构建规范格式。CDK将在CloudFormation模板中输出一个字符串化的JSON。如果希望CDK输出YAML,请使用fromObjectToYaml
。这两种方法都以键值对(类型:[key: string]: any;
)作为输入,因此TS不能提供更多的打字帮助。BuildSpec.fromSourceFilename
告诉CodeBuild在运行时在源代码中使用buildspec文件。文件名在CloudFormation模板中传递。下面是使用yaml包将YAML字符串解析为内联YAML输出的示例。请注意,环境是在buildspec之外定义的:
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),
});
https://stackoverflow.com/questions/71406505
复制相似问题