使用 Travis、AWS Elasticbeanstalk 和 Docker 构建失败

Failure in build using Travis, AWS Elasticbeanstalk and Docker

我在使用 GitHub 作为存储库构建我的 React 项目时遇到问题,Travis 作为 CI 使用 AWS ElasticBeanStalk 作为服务 运行 我的应用程序使用 Docker.我能够 运行 我的测试套件,但在那之后,它没有在 AWS 上部署我的应用程序,也没有在 Travis 控制台中收到任何错误,除了以下内容:

下面是我的 Travis .yml 文件配置:

language: generic
services:
  - docker

before_install:
  - docker build -t heet1996/my-profile -f Dockerfile.dev .

script:
  - docker run heet1996/my-profile npm run test -- --coverage

deploy:
  provider: elasticbeanstalk
  region: "us-east-1"
  app: "My-profile"
  env: "MyProfile-env"
  bucket_name: "elasticbeanstalk-us-east-1-413920612934"
  bucket_path: "My-profile"
  on:
    branch: master
  access_key_id: $AWS_ACCESS_KEY
  secret_access_key: "$AWS_SECRET_KEY"
    

如果您需要更多信息,请告诉我

您可以尝试的几件事:

您的脚本命令需要设置环境变量 CI=true

所以

script:
  - docker run heet1996/my-profile npm run test -- --coverage

变成

script:
  - docker run -e CI=true heet1996/my-profile npm run test -- --coverage

AWS 还需要以不同的方式命名访问变量。

改变

access_key_id: $AWS_ACCESS_KEY
secret_access_key: "$AWS_SECRET_KEY"

access_key_id: "$AWS_ACCESS_KEY_ID"
secret_access_key: "$AWS_SECRET_ACCESS_KEY"

使用选项 --coverage,您的测试将挂起,等待输入。因此消息:“...在过去的 10 分钟内未收到任何输出...”。

在某个时候,--coverage 可能能够停止测试(因为有些用于该目的),但我猜它不是为了那个目的,docker 的后续版本删除了该行为。

您的测试必须结束并且结论是 Travis 部署成功才能开始。

改用选项--watchAll=false。所以你应该:

...
script:
  - docker run heet1996/my-profile npm run test -- --watchAll=false
...

这将解决您的测试永远不会结束的明显问题(这可能是唯一的问题)。之后,确保您的测试成功。然后,您可以担心其他问题,例如AWS上的身份验证等...