首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeBuild:如何生成辅助工件

CodeBuild:如何生成辅助工件
EN

Stack Overflow用户
提问于 2022-01-28 16:04:48
回答 2查看 876关注 0票数 0

我目前正在通过CDK为我的管道设计一个BuildSpec,而且我似乎无法正确地获得SecondaryArtifacts属性。下面是关于相关文件 SecondaryArtifacts的内容,下面是我迄今为止所做的尝试:

代码语言:javascript
复制
const buildSpecJSON = {
      version: "0.2",
      phases: {
        install: {
          "runtime-versions": {
            nodejs: "14.x",
          },
          commands: ["npm install -g aws-cdk"],
        },
        build: {
          commands: [
            "npm ci && npm run prepare-deploy && npm run build && cd cdk",
            "cdk synth CommonInfrastructureStack AssetDeploymentStack BusinessAssetAPIStack",
          ],
        },
      },
      reports: {
        [testReports.reportGroupArn]: {
          files: ["unit_tests_coverage.xml"],
          "file-format": "JUNITXML",
          "base-directory": "coverage/",
        },
        [coverageReports.reportGroupArn]: {
          files: ["cobertura-coverage.xml"],
          "file-format": "COBERTURAXML",
          "base-directory": "coverage/",
        },
      },
      artifacts: {
        "base-directory": "cdk/cdk.out/",
        files: [
          "CommonInfrastructureStack.template.json",
          "AssetDeploymentStack.template.json",
          "BusinessAssetAPIStack.template.json",
        ],
        "secondary-artifacts": {
          dist: {
            files: ["*"],
            name: "dist",
            "base-directory": "dist/",
          },
        },
      },
    }

问题是它没有产生任何次要的人工产物。也没有错误消息,所以我不知道问题是dist文件夹是空的,尽管它很可能不是,或者YAML不正确。

提亚

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-31 09:58:37

问题是我太专注于buildspec,而不是CodeBuildAction本身。对于将来会遇到这个问题的人来说,您必须明白不能同时定义ArtifactSecondaryArtifacts

提供给BuildSpec.fromObject(buildSpecJSON)方法的正确的BuildSpec.fromObject(buildSpecJSON)如下:

代码语言:javascript
复制
const lambdaBuildOutput = new Artifact("DistArtifact")
const cdkBuildOutput = new Artifact("CdkBuildOutput")
const lambdaLayer = new Artifact("LayerArtifact")
const buildSpecJSON = {
      version: "0.2",
      ...
      artifacts: {
        files: ["**/*"],
        "secondary-artifacts": {
          CdkBuildOutput: {
            "base-directory": "cdk/cdk.out/",
            files: [
              "CommonInfrastructureStack.template.json",
              "AssetDeploymentStack.template.json",
              "BusinessAssetAPIStack.template.json",
            ],
            name: "CdkBuildOutput",
          },
          DistArtifact: {
            files: ["*"],
            name: "DistArtifact",
            "base-directory": "dist/",
          },
          LayerArtifact: {
            files: ["**/*"],
            name: "LayerArtifact",
            "base-directory": "cdk/lambda-layer/nodejs/",
          },
        },
      },
    }

然后,通过outputsCodeBuildAction上提供额外的输出。

代码语言:javascript
复制
const buildAction = new CodeBuildAction({
      actionName: "CDK-Build",
      project: cdkBuild,
      input: sourceArtifact,
      outputs: [cdkBuildOutput, lambdaBuildOutput, lambdaLayer],
    })

这就是通过CDK文档给我提供的说明,这些文档以正确的方式推动了我:

注意:如果您在这里指定了多个输出工件,则不能使用buildspec的主要“工件”部分;您必须使用“次要工件”部分。详情请参见https://docs.aws.amazon.com/codebuild/latest/userguide/sample-multi-in-out.html

我希望这能对任何走上这条路的人有所帮助。再次感谢@fedonev,他们的回答对我也有帮助。

票数 2
EN

Stack Overflow用户

发布于 2022-01-30 15:20:23

工件在codebuild.Project构造器道具中出现两次。您已经将次要工件添加到buildspec中,但是(我猜)不是项目的secondaryArtifacts: IArtifacts[]属性:

CodeBuild文档secondaryArtifacts属性包含一个工件定义列表。这些工件使用嵌套在secondary-artifacts块内的buildspec文件的artifacts块。

添加一个secondaryArtifacts道具。引用它的Artifact identifier值(下面示例中的DistArtifact)在buildspec中。CDK语法如下所示:

代码语言:javascript
复制
new codebuild.Project(this, 'SecondaryArtifactProject', {
  // ... code
  artifacts: codebuild.Artifacts.s3({
    bucket,
    packageZip: false,
    includeBuildId: false,
    // name: '/',  <-- can also set the S3 name here.  This attribute takes precedence over the buildspec `name`
  }),
  secondaryArtifacts: [
    codebuild.Artifacts.s3({
      bucket,
      includeBuildId: false,
      packageZip: false,
      identifier: 'DistArtifact', // arbitrary label - refer to this in buildspec
    }),
  ],
  buildSpec: codebuild.BuildSpec.fromObject({
    // ... code
    artifacts: {
      'base-directory': 'cdk/cdk.out/', // path in source
      files: [ "files..." ],
      name: 'cdk.out', // s3 output key; optional, used if artifact.name is undefined
      'secondary-artifacts': {
        DistArtifact: { // use the identifier you defined above in `secondaryArtifacts`
          'base-directory': 'dist/',
          files: ['**/*'],
          name: 'dist'
        },
      },
    },
  }),
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70896647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档