无法在 AWS CodeBuild 映像中使用 amazon-linux-extras

Posted

技术标签:

【中文标题】无法在 AWS CodeBuild 映像中使用 amazon-linux-extras【英文标题】:Cannot use amazon-linux-extras in AWS CodeBuild image 【发布时间】:2021-12-01 06:41:34 【问题描述】:

我的 CDK 堆栈使用以下 CodeBuild 项目定义了一个 CodePipeline:

project_build = codebuild.Project(self, "ProjectBuild",
    project_name = "Build",
    source = github_source,
    environment = codebuild.BuildEnvironment(
        build_image = codebuild.LinuxBuildImage.AMAZON_LINUX_2_2,
        privileged = True),
    environment_variables =  … ,
    build_spec = codebuild.BuildSpec.from_source_filename("cdk/buildspec/build.yml"))

我正在使用 Amazon Linux 2 映像,并且想在其上安装 PostgreSQL,所以我制作了这个简单的 buildspec 测试文件:

version: 0.2

phases: 
  install:
    commands:
      - amazon-linux-extras install postgresql13
  build: 
    commands:
      - echo "foo"

这是作业引发的错误:

[Container] 2021/10/12 16:50:32 Entering phase INSTALL
[Container] 2021/10/12 16:50:32 Running command amazon-linux-extras
/root/.pyenv/versions/3.8.10/bin/python: No module named amazon_linux_extras

[Container] 2021/10/12 16:50:34 Command did not exit successfully amazon-linux-extras exit status 1
[Container] 2021/10/12 16:50:34 Phase complete: INSTALL State: FAILED
[Container] 2021/10/12 16:50:34 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: amazon-linux-extras. Reason: exit status 1

我不明白为什么amazon-linux-extras 会作为 Python 模块运行。我尝试过使用/usr/bin/amazon-linux-extras 绝对路径,但没有取得更好的成功。

我在 Amazon Linux 实例上直接使用 amazon-linux-extras 从来没有遇到过任何问题,但我应该如何在 CodeBuild 上下文中使用它?

【问题讨论】:

【参考方案1】:

看来amazon-linux-extras 脚本仅适用于 Python 2,并且正在使用 python 可执行文件。

我需要像这样为我的命令添加前缀,以确保使用 python2 可执行文件:

version: 0.2

phases: 
  install:
    commands:
      - PYTHON=python2 amazon-linux-extras enable postgresql13
      - yum clean metadata
      - yum install postgresql
  build: 
    commands:
      - echo "foo"

【讨论】:

【参考方案2】:

尽管它是一个 AWS Linux 实例,但 CodeBuild 标准映像上并未预先安装许多 AWS 内容。您经常需要安装它——比如 CDK 或其他什么。在尝试调用之前尝试yum install -y amazon-linux-extras

【讨论】:

我已经想到了,yum 命令运行良好并升级了包(意思是已经安装了),但是amazon-linux-extras 命令还是 Pythonishy 执行失败了。 多么奇怪。尝试在 buildspec 中指定您的运行时环境 - 我假设您并不意味着它是 Python,例如 -runtime nodejs: latest(有关更多信息,请参阅 docs.aws.amazon.com/codebuild/latest/userguide/…) 道歉:runtime-versions: - nodejs: latest【参考方案3】:

这个错误似乎是由于 Amazon Linux 2 使用 Python 2.7 而 pyenv 环境使用 Python 3 造成的。

CodeBuild 似乎一直在使用 pyenv。因此 amazon-linux-extras 命令将通过创建如下符号链接来工作。

ln -s /lib/python2.7/site-packages/amazon_linux_extras ~/.pyenv/versions/3.8.10/lib/python3.7/site-packages/

【讨论】:

以上是关于无法在 AWS CodeBuild 映像中使用 amazon-linux-extras的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS CodeBuild 上预置自定义 Docker 映像需要很长时间

AWS CodePipeline:如何使 CodeBuild 构建的 ECR 映像作为剩余阶段的工件?

AWS Codebuild“名为 '3.1' 的 dotnet 的未知运行时版本。此构建映像具有以下版本:2.2”

无法将更改从 AWS CodeBuild 推送到 AWS CodeCommit

AWS CodeBuild 本地缓存无法实际缓存?

Puppeteer 无法在 AWS CodeBuild 上运行 Chrome