如何在 ElasticBeanstalk 中提取 AWS CodeBuild 输出的 zip?



我正在尝试使AWS Codepipeline与S3源,CodeBuild和Elastic Beanstalk(Nodejs Environment(

我的问题在于CodeBuild和Beanstalk之间。

我有CodeBuild通过工件输出最终Nodejs应用程序的zip文件。这是我的CodeBuild buildspec.yml

version: 0.1
phases:
  install:
    commands:
      - echo Installing Node Modules...
      - npm install -g mocha
      - npm install
  post_build:
    commands:
      - echo Performing Test
      - npm test
      - zip -r app-api.zip .
artifacts:
  files:
    - app-api.zip

当我手动运行CodeBuild时,它将ZIP成功地放入S3中。当我运行codepipeline时,它将zip放在每个弹性beanstalk实例上/var/app/current as app-api.zip

我想要的是提取app-api.zip as/var/app/current。就像通过弹性Beanstalk控制台接口部署手册一样。

首先,快速解释。CodePipeline将您指定为工件的任何文件发送到弹性豆虫。在您的情况下,您要发送app-api.zip

您可能想要想要做的是发送所有文件,而不是将它们包裹在zip中。

让我们更改您的buildspec.yml以不创建app-api.zip,然后将RAW文件发送到Codepipeline。

version: 0.1
phases:
  install:
    commands:
      - echo Installing Node Modules...
      - npm install -g mocha
      - npm install
  post_build:
    commands:
      - echo Performing Test
      - npm test
#     - zip -r app-api.zip . **<< Remove this line**
artifacts:
  files:
    - '**/*'
# Replace artifacts/files with the value shown above

2023 UPDATE

从Codebuild到Beanstalk发送拉链的工件似乎仍然非常有问题。就我而言,部署文件夹在安装过程中使用maven-antrun-plugin插件进行了串联,而不是上面的buildspec,并且在上传到EB控制台或CLI时效果很好。

但是,当CodeBuild buildspec指向同一zipperift伪像时,EB失败了

An error occurred during execution of command [app-deploy] - [CheckProcfileForJavaApplication]. Stop running the command. Error: there is no Procfile and no .jar file at root level of your source bundle

事实并非如此,因为我可以下载/解开部署文件夹并在本地运行罐子。这与我通常通过控制台上传的内容相同。

我终于注意到eb-engine.log的微小差异。

/opt/elasticbeanstalk/deployment/app_source_bundle: Zip archive data, at least v1.0 to extract 本地建造和上传到控制台-Works

/opt/elasticbeanstalk/deployment/app_source_bundle: Zip archive data, at least v2.0 to extract 在CodeBuild上打开 - 不起作用

@unsigned提供的解决方案似乎仍然是解决方案,或者是最佳实践。

最新更新