AWS CDK 管道构造:代码构建错误 254

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?