如何解决AWS CDK 管道构造:代码构建错误 254
我对 AWS CDK 还很陌生,我正在尝试按照此处有关 Cdk 管道构造的教程来构建我自己的管道 https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html
我尝试从创建一个基本管道开始(请参阅下面的代码) - 但是我在 CodeBuild 中不断收到错误消息,显示 npm ERR! enoent ENOENT: no such file or directory,open '/codebuild/output/src503090835/src/package.json'
。我不完全确定为什么会出现这种情况,因为我使用的是 CdkPipeline 构造,所以我没有直接自己制作 CodeBuild 资源。
有没有人以前经历过这种情况,并且能够解释一下?
lib/pipeline-stack.ts
import { Stack,StackProps,Construct,SecretValue } from '@aws-cdk/core';
import { CdkPipeline,SimpleSynthAction } from '@aws-cdk/pipelines';
import * as codepipeline from '@aws-cdk/aws-codepipeline';
import * as codepipeline_actions from '@aws-cdk/aws-codepipeline-actions';
import { GITHUB_VALUES} from '../lib/constants'
export class Pipelinestack extends Stack {
constructor(scope: Construct,id: string,props?: StackProps) {
super(scope,id,props);
const sourceArtifact = new codepipeline.Artifact();
const cloudAssemblyArtifact = new codepipeline.Artifact();
const pipeline = new CdkPipeline(this,'pipeline',{
pipelineName: 'cherry-client-pipeline',cloudAssemblyArtifact,sourceAction: new codepipeline_actions.GitHubSourceAction({
actionName: 'GitHub',output: sourceArtifact,oauthToken: SecretValue.secretsManager(GITHUB_VALUES.OAUTH_TOKEN_NAME),trigger: codepipeline_actions.GitHubTrigger.POLL,owner: GITHUB_VALUES.OWNER,repo: GITHUB_VALUES.REPO,branch: 'main'
}),synthAction: SimpleSynthAction.standardNpmSynth({
sourceArtifact,buildCommand: 'npm run build'
}),});
}
}
bin/pipeline.ts
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { Pipelinestack } from '../lib/pipeline-stack';
import { ENVIRONMENTS } from '../lib/constants'
const app = new cdk.App();
new Pipelinestack(app,'pipeline-stack',{
env: ENVIRONMENTS.DEV
});
app.synth();
cdk.json
{
"app": "npx ts-node --prefer-ts-exts bin/pipeline.ts","context": {
"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,"@aws-cdk/core:enableStackNameDuplicates": "true","aws-cdk:enableDiffNoFail": "true","@aws-cdk/core:stackRelativeExports": "true","@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true,"@aws-cdk/aws-secretsmanager:parSEOwnedSecretName": true,"@aws-cdk/aws-kms:defaultKeyPolicies": true,"@aws-cdk/aws-s3:grantWriteWithoutAcl": true,"@aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount": true,"@aws-cdk/aws-rds:lowercaseDbIdentifier": true,"@aws-cdk/aws-efs:defaultEncryptionAtRest": true,"@aws-cdk/aws-lambda:recognizeVersionProps": true,"@aws-cdk/core:newStyleStackSynthesis": true
}
}
package.json
{
"name": "pipeline","version": "0.1.0","bin": {
"pipeline": "bin/pipeline.js"
},"scripts": {
"build": "tsc","watch": "tsc -w","test": "jest","cdk": "cdk"
},"devDependencies": {
"@aws-cdk/assert": "1.115.0","@types/jest": "^26.0.10","@types/node": "10.17.27","jest": "^26.4.2","ts-jest": "^26.2.0","aws-cdk": "1.115.0","ts-node": "^9.0.0","typescript": "~3.9.7"
},"dependencies": {
"@aws-cdk/aws-codebuild": "^1.115.0","@aws-cdk/aws-codepipeline": "^1.115.0","@aws-cdk/aws-codepipeline-actions": "^1.115.0","@aws-cdk/aws-s3-deployment": "^1.115.0","@aws-cdk/core": "1.115.0","@aws-cdk/pipelines": "^1.115.0","source-map-support": "^0.5.16"
}
}
解决方法
我已经设法找到了一个答案(至少针对我的情况),以防将来对任何人有所帮助。
CdkPipeline 结构有两个主要作用
-
sourceAction
触发时从存储库中抓取代码 -
synthAction
负责建筑
synthAction 有一些默认值,这些默认值在文档/教程中对我来说并不是很明显。例如- 它假设它会在代码仓库的根目录找到 cdk.json 和 (cdk)package.json
我的 cdk 应用程序位于名为“pipeline”的子目录中,因此我需要使用属性 subdirectory
synthAction: SimpleSynthAction.standardNpmSynth({
sourceArtifact,cloudAssemblyArtifact,subdirectory: 'pipeline',buildCommand: 'cd ../services/website && npm run build'
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。