AWS CodePipeline BuildAction未检测到buildspec.yml次要工件

问题描述

我正在尝试使用辅助工件将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
    

解决方法

webapptemplate次要吸引人(来自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:,然后是所有数据。