【问题标题】:AWS codeBuild doesn't run the .ebextension configAWS codeBuild 不运行 .ebextension 配置
【发布时间】:2020-08-20 23:58:06
【问题描述】:

我正在使用 AWS 代码提交进行测试和部署,并且需要在使用 codeBuild 运行单元测试之前预安装 redis、chromium。所有安装配置都在 .ebextensions 上,如果我删除构建步骤,它可以在 EB 实例上正常工作。

但是当我使用 codeBuild 管道时, buildspec.yml 在运行测试之前似乎没有运行 .ebextension 配置。有人知道如何在 pre_build 中运行 .ebextensions 吗?

version: 0.2

phases:
install:
runtime-versions:
nodejs: 12
commands:
- echo Installing jest...
- npm install -g jest
pre_build:
commands:
- echo Installing source NPM dependencies...
- npm install
- echo Starting app...
- npm start
build:
commands:
- echo Build started on `date`
- echo Running unit tests...
- npm run test
post_build:
commands:
- echo Build completed on `date`
artifacts:
files:
- **/*
- .ebextensions/**/*

代码构建日志


[2020/05/05 11:55:29 Waiting for agent ping
[2020/05/05 11:55:31 Waiting for DOWNLOAD_SOURCE
[2020/05/05 11:55:32 Phase is DOWNLOAD_SOURCE
[2020/05/05 11:55:32 CODEBUILD_SRC_DIR=/codebuild/output/src129341116/src
[2020/05/05 11:55:32 YAML location is /codebuild/output/src129341116/src/buildspec.yml
[2020/05/05 11:55:32 Processing environment variables
[2020/05/05 11:55:32 Selecting 'nodejs' runtime version '12' based on manual selections...
[2020/05/05 11:55:32 Running command echo "Installing Node.js version 12 ..."
Installing Node.js version 12 ...

[2020/05/05 11:55:32 Running command n $NODE_12_VERSION
installed : v12.16.1 (with npm 6.13.4)

[2020/05/05 11:55:41 Moving to directory /codebuild/output/src129341116/src
[2020/05/05 11:55:41 Registering with agent
[2020/05/05 11:55:41 Phases found in YAML: 4
[2020/05/05 11:55:41 BUILD: 3 commands
[2020/05/05 11:55:41 POST_BUILD: 1 commands
[2020/05/05 11:55:41 INSTALL: 2 commands
[2020/05/05 11:55:41 PRE_BUILD: 4 commands
[2020/05/05 11:55:41 Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED
[2020/05/05 11:55:41 Phase context status code: Message:
[2020/05/05 11:55:41 Entering phase INSTALL
[2020/05/05 11:55:41 Running command echo Installing jest...
Installing jest...
.................
[2020/05/05 11:55:41 Running command npm install -g jest
....................
[2020/05/05 11:55:55 Entering phase PRE_BUILD
[2020/05/05 11:55:55 Running command echo Installing source NPM dependencies...
Installing source NPM dependencies...

如果我看到日志,它不会在运行测试之前运行 .ebextensions 脚本来安装 Redis 和其他软件。

【问题讨论】:

  • .ebextensions 由 beanstalk 运行,而不是 codebuild。
  • 而且你不能在代码构建中轻松运行它们,因为它们具有特定于 Beanstalk 的格式。
  • 那么我如何在 codebuild 运行测试之前安装我的依赖项?将它们全部复制到 buildspec 中?
  • 我添加了更多细节的答案,因为它太长了,无法在 cmets 中写入。

标签: node.js amazon-web-services aws-codebuild aws-codecommit


【解决方案1】:

.ebextensions 由 Elastic Beanstalk 执行。

CodeBuild 不会运行它们,并且您无法在 CodeBuild 中执行它们,因为它们具有特定于 Elastic Beanstalk 的格式。

要为您的测试安装依赖项,您必须使用 yum 或 apt 命令手动执行此操作,具体取决于您的 CodeBuild 映像。

您还可以在部署包中创建 bash 脚本文件,您可以在 CodeBuild 中执行这些文件。然后脚本文件可以安装所有依赖项。

或者,如果您有很多复杂的依赖项、配置文件,您可以将您的应用程序部署为docker on Beanstalk。这样,您的 docker 镜像将包含所有必需的依赖项,包括用于测试的依赖项。

还有可能在 CodeBuild 中使用eb cli:

但是,我不确定这是否适合您的用例。

【讨论】:

  • 将 install .ebextension 配置命令复制到 .sh 然后在 buildspec 中调用它们:安装解决了我的问题
【解决方案2】:

.ebextensions 用于 Elastic Beanstalk,CodeBuild 使用名为 buildspec 的文件。

见:https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html

【讨论】:

  • 那么,我是否需要从 .ebextensions 复制 buildspec 中的命令以在运行测试之前安装它们
  • 嗨,是的,我相信你会的。我知道 CodeBuild 只会读取 buildspec 文件。
猜你喜欢
  • 1970-01-01
  • 2017-04-25
  • 2021-12-13
  • 2021-04-15
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 2018-06-22
相关资源
最近更新 更多