AWS codeBuild 不运行 .ebextension 配置
Posted
技术标签:
【中文标题】AWS codeBuild 不运行 .ebextension 配置【英文标题】:AWS codeBuild doesn't run the .ebextension config 【发布时间】: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 中写入。
【参考方案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 文件。以上是关于AWS codeBuild 不运行 .ebextension 配置的主要内容,如果未能解决你的问题,请参考以下文章
AWS CodeBuild 不生成构建文件夹 - NodeJS
Puppeteer 无法在 AWS CodeBuild 上运行 Chrome
AWS CodePipeline 能否在不劫持 CodeBuild 的工件设置的情况下触发 AWS CodeBuild?
Python cfn_tools 模块不会加载到在 AWS CodePipeline 中运行的 AWS CodeBuild 中