AWS CodePipeline 部署到 Elastic Beanstalk 后丢失目录/文件

Jus*_*ter 1 amazon-web-services node.js amazon-elastic-beanstalk aws-codepipeline aws-codebuild

这是源于我之前的问题的一个更狭窄的问题。

这是我的 buildspec.yml:

version: 0.2

phases:
  install:
    commands:
      # upgrade AWS CLI
      - pip install --upgrade awscli
      # install Node 12
      - curl -sL https://deb.nodesource.com/setup_12.x | bash -
      - apt install nodejs

  pre_build:
    commands:
      # install server dependencies
      - npm install
  build:
    commands:
      # install client dependencies and build static files
      - npm install --prefix client && npm run build --prefix client

  post_build:
    commands:
      # FOR TESTING AND DEBUGGING
      - ls -la
      - ls client -la
      - mkdir client/TEST
      - ls client -la

artifacts:
  files:
    - '**/*'
  discard-paths: no
  base-directory: '*'
Run Code Online (Sandbox Code Playgroud)

在构建后阶段,我输出用于调试的目录,这就是它们显示的内容:

[Container] 2020/07/02 02:36:15 Entering phase POST_BUILD
[Container] 2020/07/02 02:36:15 Running command ls -la
total 132
drwxr-xr-x  11 root root  4096 Jul  2 02:34 .
drwxr-xr-x   3 root root  4096 Jul  2 02:34 ..
-rw-rw-r--   1 root root   129 Jul  2 02:33 .gitignore
-rw-rw-r--   1 root root    16 Jul  2 02:33 .npmrc
-rw-rw-r--   1 root root    34 Jul  2 02:33 README.md
-rw-rw-r--   1 root root  1737 Jul  2 02:33 app.js
drwxr-xr-x   2 root root  4096 Jul  2 02:34 bin
-rw-rw-r--   1 root root   655 Jul  2 02:33 buildspec.yml
drwxr-xr-x   6 root root  4096 Jul  2 02:35 client
drwxr-xr-x   2 root root  4096 Jul  2 02:34 config
drwxr-xr-x   2 root root  4096 Jul  2 02:34 graphql
drwxr-xr-x   2 root root  4096 Jul  2 02:34 models
drwxr-xr-x 197 root root  4096 Jul  2 02:34 node_modules
-rw-rw-r--   1 root root 63888 Jul  2 02:33 package-lock.json
-rw-rw-r--   1 root root   814 Jul  2 02:33 package.json
drwxr-xr-x   2 root root  4096 Jul  2 02:34 routes
drwxr-xr-x   2 root root  4096 Jul  2 02:34 services
drwxr-xr-x   2 root root  4096 Jul  2 02:34 views




[Container] 2020/07/02 02:36:15 Running command ls client -la
total 748
drwxr-xr-x    6 root root   4096 Jul  2 02:35 .
drwxr-xr-x   11 root root   4096 Jul  2 02:34 ..
drwxr-xr-x    3 root root   4096 Jul  2 02:36 build
drwxr-xr-x 1081 root root  36864 Jul  2 02:35 node_modules
-rw-rw-r--    1 root root 699332 Jul  2 02:33 package-lock.json
-rw-rw-r--    1 root root   1212 Jul  2 02:33 package.json
drwxr-xr-x    2 root root   4096 Jul  2 02:34 public
drwxr-xr-x    8 root root   4096 Jul  2 02:34 src



[Container] 2020/07/02 02:36:15 Running command mkdir client/TEST



[Container] 2020/07/02 02:36:15 Running command ls client -la
total 752
drwxr-xr-x    7 root root   4096 Jul  2 02:36 .
drwxr-xr-x   11 root root   4096 Jul  2 02:34 ..
drwxr-xr-x    2 root root   4096 Jul  2 02:36 TEST
drwxr-xr-x    3 root root   4096 Jul  2 02:36 build
drwxr-xr-x 1081 root root  36864 Jul  2 02:35 node_modules
-rw-rw-r--    1 root root 699332 Jul  2 02:33 package-lock.json
-rw-rw-r--    1 root root   1212 Jul  2 02:33 package.json
drwxr-xr-x    2 root root   4096 Jul  2 02:34 public
drwxr-xr-x    8 root root   4096 Jul  2 02:34 src




[Container] 2020/07/02 02:36:15 Phase complete: POST_BUILD State: SUCCEEDED
[Container] 2020/07/02 02:36:15 Phase context status code:  Message: 
[Container] 2020/07/02 02:36:15 Phase complete: UPLOAD_ARTIFACTS State: SUCCEEDED
[Container] 2020/07/02 02:36:15 Phase context status code:  Message:
Run Code Online (Sandbox Code Playgroud)

这表明client/buildclient/node_modules和一个测试目录client/TEST都是在 CodeBuild 期间创建的。然而,当我进入 Beanstalk 环境时,我收到错误:

ENOENT: no such file or directory, stat '/var/app/current/client/build/index.html'
Run Code Online (Sandbox Code Playgroud)

当我 ssh 进入 Beanstalk 并检查/var/app/current/目录时,node_modules根目录中的 已成功构建。然而,client/buildclient/node_modules、 和client/TEST全部缺失

$ cd /var/app/current
$ ls
app.js  buildspec.yml  config  models  package.json  Procfile  routes  views
bin  client  graphql  node_modules  package-lock.json  README.md  services
$ cd client
$ ls
package.json package-lock.json public src
Run Code Online (Sandbox Code Playgroud)

这向我表明 CodePipeline 的部署阶段artifacts或者buildspec.yml. 我在这个问题上纠结了很久,不知道该怎么办。

Mar*_*cin 5

根据评论。

为了部署到 ElasticBeanstalk,CodePipepine在操作中使用 Elastic BeanstalkDeploy提供程序。作为设置此操作的一部分,input artifacts需要进行指定。

问题在于输入工件被设置为使用Source操作,而不是CodeBuild操作本身。

解决方案是调整操作的设置Deploy以使用CodeBuild工件,而不是源工件。