问题描述
我正在尝试使用辅助工件将cdk生成的Stack文件中的文件从网页中分离出来。但是管道中的BuildAction并未检测到将Web文件与Stack文件分开的辅助工件。
我尝试遵循与buildspec.yml以及多个源和多个输出有关的AWS文档上的建议,但是无法使其正常工作。
这是构建操作的cdk代码。
const buildStage = pipeline.addStage({ stageName: 'Build'});
const buildOutputWeb = new Artifact("webapp")
const buildOutputTemplates = new Artifact("template")
const project = new PipelineProject(this,'Wavelength_build',{
environment: {
buildImage: LinuxBuildImage.STANDARD_3_0
},projectName: 'WebBuild'
});
buildStage.addAction(new CodeBuildAction({
actionName: 'Build',project,input: sourceOutput,outputs: [buildOutputWeb,buildOutputTemplates]
}));
{
"Actions": [
{
"ActionTypeId": {
"Category": "Build","Owner": "AWS","Provider": "CodeBuild","Version": "1"
},"Configuration": {
"ProjectName": {
"Ref": "Wavelengthbuild7D63C781"
}
},"InputArtifacts": [
{
"Name": "SourceOutput"
}
],"Name": "Build","OutputArtifacts": [
{
"Name": "webapp"
},{
"Name": "template"
}
],"RoleArn": {
"Fn::GetAtt": [
"WavelengthPipelineBuildCodePipelineActionRoleC08CF8E2","Arn"
]
},"Runorder": 1
}
],"Name": "Build"
},
这是我的buildspec.yml
version: 0.2
env:
variables:
S3_BUCKET: "wavelenght-web.ronin-ddd-dev-web.net"
phases:
install:
runtime-versions:
nodejs: 10
pre_build:
commands:
- echo Installing source NPM dependencies...
- npm install -g @angular/cli
- npm install typescript -g
- npm install -D lerna
build:
commands:
- echo Build started on `date`
- npm run release
- cd $CODEBUILD_SRC_DIR
post_build:
commands:
- echo Build completed on `date`
artifacts:
files:
- '**/*'
secondary-artifacts:
artifact1:
base-directory: $CODEBUILD_SRC_DIR
files:
- 'packages/website/dist/**/*'
name: webapp
discard-paths: yes
artifact2:
base-directory: $CODEBUILD_SRC_DIR
files:
- '*/WavelengthAppStack.template.json'
name: template
discard-paths: yes
解决方法
webapp
和template
次要吸引人(来自docs):
此块中的每个工件标识符必须与项目的secondaryArtifacts 属性中定义的工件匹配。
在您所提问题的内容中,我看不到在构建项目中定义了次要输出的任何证据。这可能可以解释为什么您会收到有关“无定义”的错误。
,我发现了问题所在。 事实证明,辅助工件中的name属性不会更改标识符。 我的buildspec.yml工件现在看起来像这样。
artifacts:
secondary-artifacts:
webapp:
base-directory: packages/website/dist
files:
- '**/*'
name: webapp
template:
base-directory: packages/infrastructure/cdk.out
files:
- 'WavelengthAppStack.template.json'
name: template
请注意,现在不是artifact1:
,而是那个工件的所有数据,是webapp:
,然后是所有数据。