通过 Codepipeline 在 Docker 上分发 Beanstalk 不完整

Posted

技术标签:

【中文标题】通过 Codepipeline 在 Docker 上分发 Beanstalk 不完整【英文标题】:Distribution of Beanstalk On Docker via Codepipleline is not complete 【发布时间】:2020-08-18 12:39:35 【问题描述】:

我在 Docker 上使用 Codepipeline 和 Beanstalk 配置 CI/CD。

在 Codepipeline 的 Build 过程之前它工作正常,但 Deploy 一直失败。

失败的原因不完全清楚,但是如下 发生错误。服务:AmazonCloudFormation,消息:堆栈命名 'awseb--stack' 中止操作。当前状态: 'UPDATE_ROLLBACK_IN_PROGRESS' 原因:以下资源失败 创建:[AWSEBUpdateWaitConditionAFyGSI, AWSEBInstanceLaunchWaitConditionaiyqOL]。

我的 Dockerfile 和 buildspec.yml,以及 dockerrun.aws.json 文件是

Dockerfile

FROM node:12.16.3-alpine as tsbuild

RUN mkdir /usr/app
WORKDIR /usr/app

COPY . /usr/app

RUN npm install
RUN npm run build

FROM node:12.16.3-alpine

RUN mkdir /usr/app
WORKDIR /usr/app

COPY --from=tsbuild /usr/app/dist /usr/app
COPY package*.json /usr/app/

RUN npm install -g pm2
RUN npm install

EXPOSE 8080

CMD ["npm", "run", "prod"]

buildspec.yml

version: 0.2
env:
  variables:
    AWS_DEFAULT_REGION: ap-northeast-2
    AWS_EB_DEPLOY_ENV: docker
phases:
  install:
    runtime-versions:
      docker: 18
      nodejs: 10
    commands:
      - aws --version
      - $(aws ecr get-login --no-include-email --region ap-northeast-2)
      - npm install
  build:
    commands:
      - docker build -t image .
  post_build:
    commands:
      - docker tag image:latest <ECR_URL>
      - docker <ECR_URL>

Dockerrun.aws.json


  "AWSEBDockerrunVersion": "1",
  "Image": 
    "Name": <ECR_URL>,
    "Update": "true"
  ,
  "Ports": [
    
      "ContainerPort": "8080"
    ],
  "Volumes": [],
  "Logging": "/var/log/nodejs"


另外,我使用的是ts-node,但是当我打开Beanstalk中分发的zip时,我找不到dist文件夹。

我在 CodeDeploy 中使用 BuildArtifacts,而不是 SourceArtifacts。这会是个问题吗?

我想知道我犯了什么错误。

【问题讨论】:

【参考方案1】:

在我看来,“Dockerrun.aws.json”没有进入源包。如果它位于代码仓库的根目录中,请在 buildspec.yml 中添加以下内容:

artifacts:
  files:
    -  '**/*'

【讨论】:

以上是关于通过 Codepipeline 在 Docker 上分发 Beanstalk 不完整的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续集成(CI)

跨账户 ECR 登录和推送构建的 Docker 映像的 CodePipeline 错误

AWS CodePipeline:同时运行多个管道

CodePipeline:如何将 ECR 与 Elastic Beanstalk 集成?

Codepipeline:权限不足无法使用 Amazon S3 对象密钥访问工件

AWS CodePipeline - 使用现有 Dockerrun.aws.json 部署到 Elastic Beanstalk