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 的格式。

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

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

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

还有可能在 CodeBuild 中使用eb cli

Using the EB CLI with AWS CodeBuild

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

【讨论】:

将 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 CodeBuild 中运行容器的权限错误

AWS CodePipeline 能否在不劫持 CodeBuild 的工件设置的情况下触发 AWS CodeBuild?

运行时找不到 Codebuild aws 命令?

Python cfn_tools 模块不会加载到在 AWS CodePipeline 中运行的 AWS CodeBuild 中