我目前正在通过CDK为我的管道设计一个BuildSpec,而且我似乎无法正确地获得SecondaryArtifacts属性。下面是关于相关文件 SecondaryArtifacts的内容,下面是我迄今为止所做的尝试:
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不正确。
提亚
发布于 2022-01-31 09:58:37
问题是我太专注于buildspec,而不是CodeBuildAction本身。对于将来会遇到这个问题的人来说,您必须明白不能同时定义Artifact和SecondaryArtifacts。
提供给BuildSpec.fromObject(buildSpecJSON)方法的正确的BuildSpec.fromObject(buildSpecJSON)如下:
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/",
},
},
},
}然后,通过outputs在CodeBuildAction上提供额外的输出。
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,他们的回答对我也有帮助。
发布于 2022-01-30 15:20:23
工件在codebuild.Project构造器道具中出现两次。您已经将次要工件添加到buildspec中,但是(我猜)不是项目的secondaryArtifacts: IArtifacts[]属性:
CodeBuild文档:
secondaryArtifacts属性包含一个工件定义列表。这些工件使用嵌套在secondary-artifacts块内的buildspec文件的artifacts块。
添加一个secondaryArtifacts道具。引用它的Artifact identifier值(下面示例中的DistArtifact)在buildspec中。CDK语法如下所示:
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'
},
},
},
}),
});https://stackoverflow.com/questions/70896647
复制相似问题