排除 Amazon CodeBuild 的故障 - Amazon CodeBuild
来自错误存储库的 Apache Maven 构建参考构件默认情况下,以根用户身份运行构建命令当文件名不是美国文件名时,构建可能会失败 英文字符从 Amazon EC2 参数存储库获取参数时,构建可能会失败无法在 CodeBuild 控制台中访问分支筛选条件 无法查看构建是成功还是失败 未向源提供商报告构建状态找不到和选择 Windows Server Core 2019 平台的基本映像 构建规范文件中的前期命令无法被后续命令识别尝试下载缓存时出现错误:“Access denied (访问被拒绝)”使用自定义构建映像时出现错误“BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE” 错误:“Build container found dead before completing the build. build container died because it was out of memory, or the Docker image is not supported (构建容器在完成构建前发现了死信。构建容器因内存不足已停止运行,或者 Docker 映像不受支持)”。ErrorCode: 500 英寸 错误:运行生成包时出现“Cannot connect to the Docker daemon (无法连接到 Docker 守护程序)”错误:”CodeBuild无权执行:sts:AssumeRole“在创建或更新构建项目时 错误:“呼叫时出错GetBucketAcl:要么存储桶所有者已更改,要么服务角色不再具有调用 s3 的权限:GetBucketAcl“ 运行构建时收到错误:“无法上传项目:arn 无效”错误:“Git Clone Failed: unable to access 'your-repository-URL': SSL certificate problem: self signed certificate (Git 克隆失败: 无法访问“your-repository-URL”: SSL 证书问题: 自签名证书)”运行构建时收到错误:“必须使用指定的终端节点来寻址当前尝试访问的存储桶”错误:“The policy's default version was not created by enhanced zero click role creation or was not the most recent version created by enhanced zero click role creation”(策略的默认版本不是通过增强的零单击角色创建来创建的或不是通过增强的零单击角色创建来创建的最新版本)。错误:“This build image requires selecting at least one runtime version. (此构建映像需要至少选择一个运行时版本。)”构建队列中的构建失败时出现错误“QUEUED: INSUFFICIENT_SUBNET”错误:“无法下载缓存:RequestError: 发送请求失败原因:x509:加载系统根目录失败且未提供根目录”错误:"Unable to download certificate from S3。AccessDenied“错误:“Unable to locate credentials (找不到凭证)” RequestError运行时出现超时错误CodeBuild在代理服务器中bourne shell (sh) 必须存在于构建映像中警告:“Skipping install of runtimes. runtime version selection is not supported by this build image (跳过运行时安装。此构建映像不支持运行时版本选择)”(在运行构建时出现)错误:“无法验证JobWorker身份”生成启动失败正在访问GitHub本地缓存版本中的元数据AccessDenied:报告组的存储桶所有者与 S3 存储桶的所有者不匹配...
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

排除 Amazon CodeBuild 的故障

使用本主题中的信息来帮助您识别、诊断和解决问题。要了解如何记录和监控 CodeBuild 版本以排查问题,请参阅日志记录和监控

主题

来自错误存储库的 Apache Maven 构建参考构件

问题:在将 Maven 与 Amazon CodeBuild 提供的 Java 构建环境结合使用时,Maven 会从安全的 Maven 中央存储库(网址为 https://repo1.maven.org/maven2)中提取构建和插件依赖项。即使您构建项目的 pom.xml 文件明确声明会改用其他位置,也会发生这种情况。

可能的原因:CodeBuild 提供的 Java 构建环境包含一个名为 settings.xml 的文件,该文件预先安装在构建环境的 /root/.m2 目录中。该 settings.xml 文件包含以下声明,这些声明将指示 Maven 始终从安全的 Maven 中央存储库 (网址为 https://repo1.maven.org/maven2) 中提取构建和插件依赖项。

<settings> <activeProfiles> <activeProfile>securecentral</activeProfile> </activeProfiles> <profiles> <profile> <id>securecentral</id> <repositories> <repository> <id>central</id> <url>https://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>https://repo1.maven.org/maven2</url> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories> </profile> </profiles> </settings>

建议的解决方案:执行以下操作:

  1. 向源代码中添加 settings.xml 文件。

  2. 在此 settings.xml 文件中,使用上述 settings.xml 格式作为指导,声明您希望 Maven 从哪些存储库中提取构建和插件依赖项。

  3. 在构建项目的 install 阶段,指示 CodeBuild 将您的 settings.xml 文件复制到构建环境的 /root/.m2 目录。例如,考虑说明此行为的 buildspec.yml 文件中的以下代码段。

    version 0.2 phases: install: commands: - cp ./settings.xml /root/.m2/settings.xml

默认情况下,以根用户身份运行构建命令

问题:Amazon CodeBuild 以根用户身份运行您的构建命令。即使您的相关构建映像的 Dockerfile 将 USER 指令设置为另一位用户,也会发生这种情况。

原因:默认情况下,CodeBuild 将以根用户身份运行所有构建命令。

建议的解决方案:无。

当文件名不是美国文件名时,构建可能会失败 英文字符

问题:当您运行使用文件名包含非美国文件的版本时 英文字符(例如,中文字符),构建失败。

可能的原因:构建环境由Amazon CodeBuild将其默认语言环境设置为POSIXPOSIX本地化设置不太兼容CodeBuild以及包含非美国的文件名 英文字符,并可能导致相关构建失败。

建议的解决方案:将以下命令添加到 buildspec 文件的 pre_build 部分。这些命令使构建环境使用美式英语 UTF-8 进行本地化设置,后者更兼容CodeBuild以及包含非美国的文件名 英文字符。

对于基于 Ubuntu 的构建环境:

pre_build: commands: - export LC_ALL="en_US.UTF-8" - locale-gen en_US en_US.UTF-8 - dpkg-reconfigure locales

对于基于亚马逊 Linux 的构建环境:

pre_build: commands: - export LC_ALL="en_US.utf8"

从 Amazon EC2 参数存储库获取参数时,构建可能会失败

问题:当构建尝试获取存储在 Amazon EC2 参数存储中的一个或多个参数的值时,构建会失败DOWNLOAD_SOURCE与错误相处Parameter does not exist

可能的原因:构建项目依赖的服务角色无权调用 ssm:GetParameters 操作,或构建项目使用由 Amazon CodeBuild 生成的服务角色并允许调用 ssm:GetParameters 操作,但参数的名称不以 /CodeBuild/ 开头。

建议的解决方案:

  • 如果服务角色不是由 CodeBuild 生成的,请将其定义更新为允许 CodeBuild 调用 ssm:GetParameters 操作。例如,以下策略语句允许调用 ssm:GetParameters 操作以获取名称以 /CodeBuild/ 开头的参数:

    { "Version": "2012-10-17", "Statement": [ { "Action": "ssm:GetParameters", "Effect": "Allow", "Resource": "arn:aws:ssm:REGION_ID:ACCOUNT_ID:parameter/CodeBuild/*" } ] }
  • 如果服务角色是由生成的CodeBuild,更新其定义以允许CodeBuild访问 Amazon EC2 参数存储中名称以外的参数/CodeBuild/。例如,以下策略语句允许调用 ssm:GetParameters 操作以获取具有指定名称的参数:

    { "Version": "2012-10-17", "Statement": [ { "Action": "ssm:GetParameters", "Effect": "Allow", "Resource": "arn:aws:ssm:REGION_ID:ACCOUNT_ID:parameter/PARAMETER_NAME" } ] }

无法在 CodeBuild 控制台中访问分支筛选条件

问题:创建或更新 Amazon CodeBuild 项目时,控制台中的分支筛选条件选项不可用。

可能的原因:分支筛选选项已被弃用。它已被 Webhook 筛选条件组取代,后者可以更好地控制触发新 CodeBuild 中的构建的 Webhook 事件。

建议的解决方案:要迁移在引入 Webhook 筛选条件之前创建的分支筛选条件,请使用正则表达式 ^refs/heads/branchName$ 创建带 HEAD_REF 筛选条件的 Webhook 筛选条件组。例如,如果您的分支筛选条件正则表达式是 ^branchName$,那么您放入 HEAD_REF 筛选条件的经过更新的正则表达式是 ^refs/heads/branchName$。有关更多信息,请参阅 Bitbucket 网络挂钩筛选GitHubwebhook 事件(控制台)

无法查看构建是成功还是失败

问题:无法查看重试构建是成功还是失败。

可能的原因:未启用报告构建状态的选项。

推荐的解决方案:启用报告生成状态当你创建或更新时CodeBuild项目。此选项告知 CodeBuild 在触发构建时报告状态。有关更多信息,请参阅《Amazon CodeBuild API 参考》中的 reportBuildStatus

未向源提供商报告构建状态

问题:允许向源提供商报告构建状态后,例如GitHub或者 Bitbucket,构建状态未更新。

可能的原因:与源提供者关联的用户没有存储库的写入权限。

推荐的解决方案:为了能够向源提供者报告构建状态,与源提供者关联的用户必须具有对存储库的写入权限。如果用户没有写入权限,则无法更新生成状态。有关更多信息,请参阅来源提供商访问权限

找不到和选择 Windows Server Core 2019 平台的基本映像

问题:你找不到或选择 Windows Server Core 2019 平台的基本映像。

可能的原因:你正在使用Amazon不支持此图像的区域。

推荐的解决方案:使用以下其中一项Amazon支持 Windows Server Core 2019 平台基础映像的区域:

  • 美国东部(弗吉尼亚州北部)

  • 美国东部(俄亥俄州)

  • 美国西部(俄勒冈州)

  • 欧洲地区(爱尔兰)

构建规范文件中的前期命令无法被后续命令识别

问题:buildspec 文件中的一个或多个命令的结果无法被同一 buildspec 文件中的后续命令识别。例如,某个命令可能会设置本地环境变量,但稍后运行的命令可能无法获取该本地环境变量的值。

可能的原因:在 buildspec 文件版本 0.1 中,Amazon CodeBuild 将在构建环境内的默认 Shell 的单独实例中运行每个命令。这表示各个命令独立于其他所有命令而运行。默认情况下,您无法运行依赖于任何先前命令的状态的单个命令。

建议的解决方案:建议您使用构建规范版本 0.2,它能解决此问题。如果您必须使用构建规范版本 0.1,建议您使用 Shell 命令链接运算符(例如,Linux 中的 &&)将多个命令合并为一个命令。或者,您也可以在源代码中包括一个带有多个命令的 Shell 脚本,然后从 buildspec 文件中的单个命令调用该 Shell 脚本。有关更多信息,请参阅 构建环境中的 Shell 和命令构建环境中的环境变量

尝试下载缓存时出现错误:“Access denied (访问被拒绝)”

问题:当尝试下载已启用缓存的构建项目上的缓存时,您收到 Access denied 错误。

可能的原因:

  • 您刚刚已将缓存配置为您的构建项目的一部分。

  • 最近已通过 InvalidateProjectCache API 使缓存失效。

  • 正在使用的服务角色CodeBuild没有s3:GetObjects3:PutObject存放缓存的 S3 存储桶的权限。

建议的解决方案:在首次使用时,在更新缓存配置后立即看到此错误是正常的。如果此错误持续存在,则您应该检查您的服务角色对包含缓存的 S3 存储桶是否具有 s3:GetObjects3:PutObject 权限。有关更多信息,请参见指定 S3 权限亚马逊 S3 开发者指南

使用自定义构建映像时出现错误“BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE”

问题:当您尝试运行使用自定义构建映像的构建时,构建将失败并返回错误 BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE

可能的原因:构建映像的未压缩总大小大于构建环境计算类型的可用磁盘空间。要检查构建映像的大小,请使用 Docker 运行 docker images REPOSITORY:TAG 命令。有关按计算类型分类的可用磁盘空间的列表,请参阅构建环境计算类型

推荐的解决方案:使用具有更多可用磁盘空间的更大计算类型,或者减小自定义构建映像的大小。

可能的原因: Amazon CodeBuild无权从您的亚马逊弹性容器注册表 (Amazon ECR) 提取构建映像。

推荐的解决方案:在 Amazon ECR 中更新存储库中的权限,以便CodeBuild可以将您的自定义构建映像拉入构建环境。有关更多信息,请参阅 亚马逊 ECR 示例

可能的原因:您请求的亚马逊 ECR 图片在Amazon你所在的地区Amazon账户正在使用。

推荐的解决方案:使用相同的 Amazon ECR 图片Amazon区域是你的Amazon账户正在使用。

可能的原因:您在没有公有 Internet 访问权限的 VPC 中使用私有注册表。CodeBuild无法从 VPC 中的私有 IP 地址提取图像。有关更多信息,请参阅 带有Amazon Secrets Manager示例的私有注册表 CodeBuild

推荐的解决方案:如果您在 VPC 中使用私有注册表,请确保 VPC 可以访问公共互联网。

可能的原因:如果错误消息包含”toomanyrequests“,而且图像是从 Docker Hub 获得的,这个错误意味着 Docker Hub 的拉取限制已达到。

推荐的解决方案:使用 Docker Hub 私有注册表,或者从亚马逊 ECR 获取您的镜像。有关使用私有注册表的更多信息,请参阅 带有Amazon Secrets Manager示例的私有注册表 CodeBuild。有关使用 Amazon ECR 的更多信息,请参阅的亚马逊 ECR 示例 CodeBuild

错误:“Build container found dead before completing the build. build container died because it was out of memory, or the Docker image is not supported (构建容器在完成构建前发现了死信。构建容器因内存不足已停止运行,或者 Docker 映像不受支持)”。ErrorCode: 500 英寸

问题:当您尝试在 Amazon CodeBuild 中使用 Microsoft Windows 或 Linux 容器时,PROVISIONING 阶段出现此错误。

可能的原因:

  • CodeBuild 不支持容器操作系统版本。

  • 在容器中指定了 HTTP_PROXY 和/或 HTTPS_PROXY

建议的解决方案:

  • 对于 Microsoft Windows,使用其中容器操作系统版本为 microsoft/windowsservercore:10.0.x(例如,microsoft/windowsservercore:10.0.14393.2125)的 Windows 容器。

  • 对于 Linux,请在 Docker 映像中清除 HTTP_PROXYHTTPS_PROXY 设置,或在构建项目中指定 VPC 配置。

错误:运行生成包时出现“Cannot connect to the Docker daemon (无法连接到 Docker 守护程序)”

问题:您的构建失败,并在构建日志中收到了类似于 Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running? 的错误。

可能的原因:您未在特权模式下运行构建。

建议的解决方案:按照以下步骤操作以在特权模式下运行构建:

  1. 打开CodeBuild控制台在https://console.aws.amazon.com/codebuild/

  2. 在导航窗格中选择 Build projects (构建项目),然后选择您的生成包。

  3. Edit (编辑) 中,选择 Environment (环境)

  4. 选择 Override images (覆盖映像),然后选择 Environment (环境)

  5. 指定环境映像、操作系统、运行时和映像。这些设置应与失败的构建的设置匹配。

  6. 选择 Privileged (特权)

    注意

    默认情况下,Docker 容器不允许访问任何设备。特权模式将授予构建项目的 Docker 容器访问所有设备的权限。有关更多信息,请参阅 Docker 文档网站上的运行时权限和 Linux 功能。此外,Windows 不支持特权模式。

  7. 选择 Update environment (更新环境)

  8. 选择 Start build (启动构建) 来重试您的生成包。

错误:”CodeBuild无权执行:sts:AssumeRole“在创建或更新构建项目时

问题:当您尝试创建或更新构建项目时,您会收到错误 Code:InvalidInputException, Message:CodeBuild is not authorized to perform: sts:AssumeRole on arn:aws:iam::account-ID:role/service-role-name

可能的原因:

  • Amazon Security Token Service (Amazon STS) 已在您尝试创建或更新构建项目的 Amazon 区域停用。

  • 与构建项目相关联的 Amazon CodeBuild 服务角色不存在,或没有足够的权限来信任 CodeBuild。

建议的解决方案:

  • 确保 Amazon STS 已经为您尝试创建或更新构建项目的 Amazon 区域激活。有关更多信息,请参阅 IAM 用户指南中的在 Amazon STS 区域中激活和停用 Amazon

  • 确保您的 Amazon 账户中存在目标 CodeBuild 服务角色。如果您没有使用控制台,请确保在创建或更新构建项目时没有拼错服务角色的 Amazon 资源名称 (ARN)。

  • 确保目标 CodeBuild 服务角色具有足够的权限来信任 CodeBuild。有关更多信息,请参阅 创建 CodeBuild 服务角色 中的信任关系策略声明。

错误:“呼叫时出错GetBucketAcl:要么存储桶所有者已更改,要么服务角色不再具有调用 s3 的权限:GetBucketAcl“

问题:运行构建时,您收到一个有关 S3 存储桶所有权更改和 GetBucketAcl 权限更改的错误。

可能的原因:你添加了s3:GetBucketAcls3:GetBucketLocation对您的 IAM 角色的权限。这些权限可保护您项目的 S3 存储桶,并确保只有您可以访问它。添加完这些权限后,S3 存储桶的拥有者会发生更改。

推荐的解决方案:确认您是 S3 存储桶的所有者,然后再次向您的 IAM 角色添加权限。有关更多信息,请参阅对 S3 存储桶的安全访问

运行构建时收到错误:“无法上传项目:arn 无效”

问题:在运行构建时,UPLOAD_ARTIFACTS 构建阶段失败并出现错误 Failed to upload artifacts: Invalid arn

可能的原因:您的 S3 输出存储桶(Amazon CodeBuild 用于存储其构建输出的存储桶)位于与 CodeBuild 构建项目不同的 Amazon 区域。

推荐的解决方案:更新构建项目的设置,使其指向同一存储桶中的输出存储桶Amazon区域作为构建项目。

错误:“Git Clone Failed: unable to access 'your-repository-URL': SSL certificate problem: self signed certificate (Git 克隆失败: 无法访问“your-repository-URL”: SSL 证书问题: 自签名证书)”

问题: 当您尝试运行构建项目时,构建失败并出现此错误。

可能的原因:您的源存储库具有一个自签名证书,但您在构建项目的过程中未选择从您的 S3 存储桶安装此证书。

建议的解决方案:

  • 编辑您的项目。对于 Certificate,选择 Install certificate from S3。对于 Bucket of certificate,选择存储您的 SSL 证书的 S3 存储桶。对于 Object key of certificate (证书的对象键),键入您的 S3 对象键的名称。

  • 编辑您的项目。选择不安全 SSL在连接到您的时忽略 SSL 警告GitHub企业服务器项目存储库。

    注意

    建议您仅将 Insecure SSL 用于测试。它不应在生产环境中使用。

运行构建时收到错误:“必须使用指定的终端节点来寻址当前尝试访问的存储桶”

问题:在运行构建时,DOWNLOAD_SOURCE 构建阶段失败并出现错误 The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint

可能的原因:您预先构建的源代码存储在 S3 存储桶中,而该存储桶位于与 Amazon CodeBuild 构建项目不同的 Amazon 区域中。

建议的解决方案:更新构建项目的设置,以指向包含预构建的源代码的存储桶。确保那个存储桶在同一个地方Amazon区域作为构建项目。

错误:“The policy's default version was not created by enhanced zero click role creation or was not the most recent version created by enhanced zero click role creation”(策略的默认版本不是通过增强的零单击角色创建来创建的或不是通过增强的零单击角色创建来创建的最新版本)。

问题:当您尝试在控制台中更新项目时,更新失败并出现此错误:

可能的原因:

  • 您已更新附加到目标 Amazon CodeBuild 服务角色的策略。

  • 您已选择附加到目标 CodeBuild 服务角色的策略的较早版本。

建议的解决方案:

  • 编辑你的CodeBuild投射并清除允许CodeBuild修改这个服务角色以便它可以在这个构建项目中使用复选框。验证您正在使用的 CodeBuild 服务角色是否具有足够的权限。如果再次编辑 CodeBuild 项目,则必须再次清除此复选框。有关更多信息,请参阅创建 CodeBuild 服务角色

  • 请按照以下步骤操作,编辑 CodeBuild 项目以使用新的服务角色:

    1. 打开 IAM 控制台并创建新的服务角色。有关更多信息,请参阅创建 CodeBuild 服务角色

    2. 打开Amazon CodeBuild控制台在https://console.aws.amazon.com/codesuite/codebuild/home

    3. 在导航窗格中,选择 Build projects

    4. 选择构建项目旁边的按钮,选择 Edit (编辑),然后选择 Environment (环境)

    5. 对于 Service role (服务角色),选择您创建的角色。

    6. 选择 Update environment (更新环境)

错误:“This build image requires selecting at least one runtime version. (此构建映像需要至少选择一个运行时版本。)”

问题:在运行构建时,DOWNLOAD_SOURCE 构建阶段失败并出现错误 YAML_FILE_ERROR: This build image requires selecting at least one runtime version

可能的原因:您的构建使用 1.0 版或更高版本的 Amazon Linux 2 (AL2) 标准映像或者 2.0 版或更高版本的 Ubuntu 标准映像,并且未在构建规范文件中指定运行时。

建议的解决方案:如果您使用 aws/codebuild/standard:2.0 CodeBuild 托管映像,则必须在 buildspec 文件的 runtime-versions 部分中指定运行时版本。例如,您可以对使用 PHP 的项目使用以下 buildspec 文件:

version: 0.2 phases: install: runtime-versions: php: 7.3 build: commands: - php --version artifacts: files: - README.md
注意

如果你指定runtime-versions分割并使用 Ubuntu Standard Image 2.0 或更高版本或亚马逊 Linux 2 (AL2) 标准映像 1.0 或更高版本以外的图像,构建会发出警告,”Skipping install of runtimes. Runtime version selection is not supported by this build image。”

有关更多信息,请参阅Specify runtime versions in the buildspec file

构建队列中的构建失败时出现错误“QUEUED: INSUFFICIENT_SUBNET”

问题:构建队列中的构建失败,出现类似于 QUEUED: INSUFFICIENT_SUBNET 的错误。

可能的原因:为 VPC 指定的 IPv4 CIDR 块使用了预留 IP 地址。每个子网 CIDR 块中的前四个 IP 地址和最后一个 IP 地址无法供您使用,而且无法分配到一个实例。例如,在具有 CIDR 块 10.0.0.0/24 的子网中,以下五个 IP 地址是保留的:

  • 10.0.0.0::网络地址。

  • 10.0.0.1:由 Amazon 保留,用于 VPC 路由器。

  • 10.0.0.2:由保留。AmazonDNS 服务器的 IP 地址始终为 VPC 网络范围的基址 + 2;但是,我们也保留了每个子网范围基址 + 2 的 IP 地址。对于包含多个 CIDR 块的 VPC,DNS 服务器的 IP 地址位于主要 CIDR 中。有关更多信息,请参阅 Amazon VPC 用户指南 中的 Amazon DNS 服务器

  • 10.0.0.3:由 Amazon 保留,供将来使用。

  • 10.0.0.255:网络广播地址。我们不支持 VPC 中的广播。该地址是预留的。

建议的解决方案:检查您的 VPC 是否使用了预留 IP 地址。将任何预留的 IP 地址替换为未预留的 IP 地址。有关更多信息,请参阅 Amazon VPC 用户指南 中的 VPC 和子网大小调整

错误:“无法下载缓存:RequestError: 发送请求失败原因:x509:加载系统根目录失败且未提供根目录”

问题: 当您尝试运行构建项目时,构建失败并出现此错误。

可能的原因:您将缓存配置为您的构建项目的一部分并使用包含过期根证书的较旧 Docker 映像。

推荐的解决方案:更新 Amazon CodeBuild 项目中使用的 Docker 映像。有关更多信息,请参阅CodeBuild 提供的 Docker 映像

错误:"Unable to download certificate from S3。AccessDenied“

问题: 当您尝试运行构建项目时,构建失败并出现此错误。

可能的原因:

  • 您选择了错误的证书 S3 存储桶。

  • 您输入了错误的证书对象键。

建议的解决方案:

  • 编辑您的项目。对于 Bucket of certificate,选择存储您的 SSL 证书的 S3 存储桶。

  • 编辑您的项目。对于 Object key of certificate (证书的对象键),键入您的 S3 对象键的名称。

错误:“Unable to locate credentials (找不到凭证)”

问题:在尝试运行 Amazon CLI、使用 Amazon 开发工具包或调用其他类似组件作为构建的一部分时,您收到与 Amazon CLI、Amazon 开发工具包或组件直接相关的构建错误。例如,您可能会收到构建错误,如 Unable to locate credentials

可能的原因:

  • 构建环境中的 Amazon CLI、Amazon 开发工具包或组件的版本与 Amazon CodeBuild 不兼容。

  • 您将在使用 Docker 的构建环境内运行 Docker 容器,并且此容器在默认情况下无权访问 Amazon 凭证。

建议的解决方案:

  • 确保您的构建环境具有以下版本或更高版本的 Amazon CLI、Amazon 开发工具包或组件。

    • Amazon CLI:1.10.47

    • 适用于 C++ 的 Amazon 开发工具包:0.2.19

    • 适用于 Go 的 Amazon 开发工具包:1.2.5

    • 适用于 Java 的 Amazon 开发工具包:1.11.16

    • AmazonSDK 用于JavaScript: 2.4.7

    • 适用于 PHP 的 Amazon 开发工具包:3.18.28

    • 适用于 Python (Boto3) 的 Amazon 开发工具包:1.4.0

    • 适用于 Ruby 的 Amazon 开发工具包:2.3.22

    • Botocore:1.4.37

    • CoreCLR:3.2.6-beta

    • Node.js:2.4.7

  • 如果您需要在某个构建环境中运行某个 Docker 容器,而该容器需要 Amazon 凭证,则必须将此凭证从该构建环境传递到该容器。在您的构建规范文件中,包含与以下内容类似的 Docker run 命令。此示例使用 aws s3 ls 命令列出您的可用 S3 存储桶。-e 选项将为容器传递访问 Amazon 凭证所需的环境变量。

    docker run -e AWS_DEFAULT_REGION -e AWS_CONTAINER_CREDENTIALS_RELATIVE_URI your-image-tag aws s3 ls
  • 如果您正在构建 Docker 镜像并且构建需要Amazon证书(例如,要从 Amazon S3 下载文件),您必须将证书从构建环境传递到 Docker 构建过程,如下所示。

    1. 在您的源代码的用于 Docker 映像的 Dockerfile 中,指定以下 ARG 指令。

      ARG AWS_DEFAULT_REGION ARG AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
    2. 在您的构建规范文件中,包含与以下内容类似的 Docker build 命令。--build-arg 选项将为 Docker 构建过程设置访问 Amazon 凭证所需的环境变量。

      docker build --build-arg AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION --build-arg AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI -t your-image-tag .

RequestError运行时出现超时错误CodeBuild在代理服务器中

问题:您收到类似于以下内容的 RequestError 错误:

  • RequestError: send request failed caused by: Post https://logs.<your-region>.amazonaws.com/: dial tcp 52.46.158.105:443: i/o timeout从CloudWatch日志。

  • Error uploading artifacts: RequestError: send request failed caused by: Put https://your-bucket.s3.your-aws-region.amazonaws.com/*: dial tcp 52.219.96.208:443: connect: connection refused来自亚马逊 S3。

可能的原因:

  • ssl-bump 未正确配置。

  • 贵组织的安全策略不允许您使用 ssl_bump

  • 您的 buildspec 文件没有使用 proxy 元素指定的代理设置。

建议的解决方案:

  • 确保 ssl-bump 已正确配置。如果您对代理服务器使用 Squid,请参阅 将 Squid 配置为显式代理服务器

  • 按照以下步骤使用 Amazon S3 的私有终端节点,以及CloudWatch日志:

    1. 在您的私有子网路由表中,删除您添加的、将发往 Internet 的流量路由到您的代理服务器的规则。有关信息,请参见在您的 VPC 中创建子网亚马逊 VPC 用户指南

    2. 创建私有 Amazon S3 终端节点然后CloudWatch记录终端节点并将其与您的 Amazon VPC 的私有子网关联。有关信息,请参见VPC 终端节点服务亚马逊 VPC 用户指南

    3. 确认启用私有 DNS 名称在您的亚马逊 VPC 中被选中。有关更多信息,请参阅 Amazon VPC 用户指南中的创建接口端点

  • 如果您不将 ssl-bump 用于显式代理服务器,请使用 proxy 元素将代理配置添加到您的 buildspec 文件。有关更多信息,请参阅 在显式代理服务器中运行 CodeBuild构建规范语法

    version: 0.2 proxy: upload-artifacts: yes logs: yes phases: build: commands:

bourne shell (sh) 必须存在于构建映像中

问题:您使用的构建映像不是由 Amazon CodeBuild 提供的,并且您的构建失败并显示消息 Build container found dead before completing the build

可能的原因:伯恩外壳 (sh) 不包含在您的构建映像中。CodeBuild 需要 sh 才能运行构建命令和脚本。

推荐的解决方案:如果sh如果不存在于您的构建映像中,请务必在开始更多使用您的映像的构建之前将其包含在内。(CodeBuild 已将 sh 包含在其构建映像中。)

警告:“Skipping install of runtimes. runtime version selection is not supported by this build image (跳过运行时安装。此构建映像不支持运行时版本选择)”(在运行构建时出现)

问题:在运行构建时,构建日志包含此警告。

可能的原因:您的版本不使用 Amazon Linux 2 (AL2) 标准映像的 1.0 或更高版本,也不使用 Ubuntu 标准映像的 2.0 或更高版本,运行时是在中指定的runtime-versions你的 buildspec 文件中的部分。

建议的解决方案:确保 buildspec 文件不包含 runtime-versions 部分。这个runtime-versions仅当您使用亚马逊 Linux 2 (AL2) 标准映像或更高版本或 Ubuntu 标准映像版本 2.0 或更高版本时,才需要此部分。

错误:“无法验证JobWorker打开时的 “身份”CodeBuild控制台

问题:当你打开CodeBuild控制台,“无法验证JobWorker显示 “身份” 错误消息。

可能的原因:用于控制台访问的 IAM 角色的标签为jobId作为关键。此标签密钥是为之保留的CodeBuild如果存在,则会导致此错误。

推荐的解决方案:更改任何具有密钥的自定义 IAM 角色标签jobId换一个不同的密钥,比如jobIdentifier

生成启动失败

问题:开始构建时,你会收到生成启动失败错误消息。

可能的原因:已达到并发构建的数量。

推荐的解决方案:等到其他构建完成,或者增加项目的并发构建限制,然后重新开始构建。有关更多信息,请参阅项目配置

正在访问GitHub本地缓存版本中的元数据

问题:在某些情况下,缓存版本中的.git 目录是文本文件而不是目录。

可能的原因:为编译启用本地源代码缓存时,CodeBuild为 gitlink 创建一个 gitlink.git目录。这意味着.git目录实际上是一个包含目录路径的文本文件。

推荐的解决方案:在所有情况下,使用以下命令获取 Git 元数据目录。无论格式如何,此命令都将起作用.git:

git rev-parse --git-dir

AccessDenied:报告组的存储桶所有者与 S3 存储桶的所有者不匹配...

问题:将测试数据上传到 Amazon S3 存储桶时,CodeBuild无法将测试数据写入存储桶。

可能的原因:

  • 为报告组存储桶所有者指定的账户与 Amazon S3 存储桶的所有者不匹配。

  • 服务角色没有存储桶的写入权限。

建议的解决方案:

  • 更改报告组存储桶所有者以匹配 Amazon S3 存储桶的所有者。

  • 修改服务角色以允许对 Amazon S3 存储桶进行写入访问。