View a markdown version of this page

问题排查 Amazon CodeBuild - Amazon CodeBuild
来自错误存储库的 Apache Maven 构建参考构件默认情况下,以根用户身份运行构建命令如果文件名不是-,则生成可能会失败U.S。构建可能会失败当从 Amazon EC2 Parameter Store 获取参数时,构建可能失败无法在 CodeBuild 控制台中访问分支筛选器无法查看构建是成功还是失败未向源提供商报告构建状态无法找到并选择 Windows Server Core 2019 平台的基本映像构建规范文件中的前期命令无法被后续命令识别尝试下载缓存时出现错误:“访问被拒绝”使用自定义构建映像时出现错误“BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE”错误:“构建容器在完成构建之前发现已失效。构建容器因内存不足而死亡,或者不支持 Docker 镜像。 ErrorCode: 500 英寸错误:运行构建时出现“无法连接到 Docker 进程守护程序”创建或更新构建项目时出现错误:AssumeRole“无权执行:st CodeBuild s:”错误:“调用时出错 GetBucketAcl:要么存储桶所有者已更改,要么服务角色不再有权调用 s3:GetBucketAcl”运行构建时收到错误:“无法上传构件:arn 无效”错误:“Git 克隆失败:无法访问 '您的存储库网址': SSL 证书问题:自签名证书”运行构建时收到错误:“必须使用指定的终端节点来寻址当前尝试访问的存储桶”错误:“此构建映像需要至少选择一个运行时版本。”构建队列中的构建失败时出现错误“QUEUED: INSUFFICIENT_SUBNET”错误:“无法下载缓存: RequestError:发送请求失败原因是:x509:无法加载系统根目录且未提供根目录”错误:“无法从 S3 下载证书。 AccessDenied”错误:“找不到凭证”RequestError CodeBuild 在代理服务器上运行时出现超时错误bourne shell(sh)必须存在于构建映像中警告:“跳过运行时安装。此构建映像不支持运行时版本选择”(在运行构建时出现)错误:“无法验证 JobWorker 身份”构建启动失败访问本地缓存版本中的 GitHub 元数据AccessDenied:报告组的存储桶所有者与 S3 存储桶的所有者不匹配...使用以下命令创建 CodeBuild 项目时出现错误:“您的凭证缺少一个或多个必需的权限范围” CodeConnections错误:使用 Ubuntu 安装命令构建时出现“Sorry, no terminal at all requested - can't get input”使用 Secrets Manager OAuth 后,Bitbucket 构建因身份验证错误而失败
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-provided 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阶段,请指示将settings.xml文件复制 CodeBuild 到构建环境的/root/.m2目录中。例如,考虑说明此行为的 buildspec.yml 文件中的以下代码段。

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

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

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

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

建议的解决方案:无。

如果文件名不是-,则生成可能会失败U.S。构建可能会失败

问题:当您运行一个版本时,该版本使用的文件名不包含-的文件U.S。字符(例如中文字符)的文件的构建时,构建将失败。

可能的原因:提供的构建环境 Amazon CodeBuild 的默认区域设置为POSIXPOSIX本地化设置与 CodeBuild 不兼容,文件名不兼容U.S。字符和可能导致相关构建失败的文件名。

建议的解决方案:将以下命令添加到构建规范文件的 pre_build 部分。这些命令可供构建环境使用 U.S。英语 UTF-8 表示其本地化设置,它更 CodeBuild 兼容,文件名包含非-U.S。的文件名。

对于基于 Ubuntu 的构建环境:

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

对于基于 Amazon Linux 的构建环境:

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

当从 Amazon EC2 Parameter Store 获取参数时,构建可能失败

问题:当构建尝试获取存储在 Amazon EC2 Parameter Store 中的一个或多个参数的值时,处于 DOWNLOAD_SOURCE 阶段的构建将失败并返回错误 Parameter does not exist

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

建议的解决方案:

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

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

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Action": "ssm:GetParameters", "Effect": "Allow", "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/PARAMETER_NAME" } ] }

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

问题:创建或更新 Amazon CodeBuild 项目时,控制台中无法使用分支筛选器选项。

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

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

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

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

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

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

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

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

可能的原因:与源提供商关联的用户不具备访问存储库的权限。

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

无法找到并选择 Windows Server Core 2019 平台的基本映像

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

可能的原因:您使用的 Amazon 区域不支持此图片。

建议的解决方案:使用以下支持 Windows Server Core 2019 平台基本映像的 Amazon 区域之一:

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

  • 美国东部(俄亥俄州)

  • 美国西部(俄勒冈州)

  • 欧洲地区(爱尔兰)

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

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

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

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

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

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

可能的原因:

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

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

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

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

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

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

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

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

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

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

可能的原因:您请求的 Amazon ECR 图片在您的 Amazon 账户使用的 Amazon 地区不可用。

推荐的解决方案:使用与您的 Amazon 账户 Amazon 所在区域相同的 Amazon ECR 映像。

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

建议的解决方案:如果您在 VPC 中使用私有注册表,请确保 VPC 具有公共互联网访问权限。

可能的原因:如果错误消息包含“toomanyrequests”,并且映像是从 Docker Hub 获取的,则此错误表示已达到 Docker Hub 的拉取限制。

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

错误:“构建容器在完成构建之前发现已失效。构建容器因内存不足而死亡,或者不支持 Docker 镜像。 ErrorCode: 500 英寸

问题:当你尝试在中使用微软 Windows 或 Linux 容器时 Amazon CodeBuild,此错误发生在配置阶段。

可能的原因:

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

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

建议的解决方案:

  • 对于微软 Windows,请使用带有容器操作系统版本为:10.0.x 的 Windows 容器 microsoft/windowsservercore(例如,: 10.0.14393.2125)。 microsoft/windowsservercore

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

错误:运行构建时出现“无法连接到 Docker 进程守护程序”

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

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

推荐的解决方案:要修复此错误,必须启用特权模式并按照以下说明更新 buildspec。

要在特权模式下运行构建,请按照以下步骤操作:

  1. 打开 CodeBuild 控制台,网址为https://console.aws.amazon.com/codebuild/

  2. 在导航窗格中选择构建项目,然后选择您的构建项目。

  3. 编辑中,选择环境

  4. 选择其他配置

  5. 特权中,选择如果要构建 Docker 映像或希望您的构建获得提升的特权,请启用此标志

  6. 选择更新环境

  7. 选择启动构建来重试您的构建。

您还需要在容器内启动 Docker 进程守护程序。buildspec 的 install 阶段可能看上去与以下示例类似:

phases: install: commands: - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 & - timeout 15 sh -c "until docker info; do echo .; sleep 1; done"

有关 buildspec 文件中引用的 OverlayFS 存储驱动程序的更多信息,请参阅 Docker 网站上的使用 OverlayFS 存储驱动程序

注意

如果基本操作系统是 Alpine Linux,请在 buildspec.yml 中向 timeout 添加 -t 参数:

- timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"

要详细了解如何使用构建和运行 Docker 镜像 Amazon CodeBuild,请参阅自定义镜像示例中的 Docker CodeBuild

创建或更新构建项目时出现错误:AssumeRole“无权执行:st CodeBuild s:”

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

可能的原因:

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

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

  • 与构建项目关联的 Amazon CodeBuild 服务角色大小写与实际的 IAM 角色不匹配。

建议的解决方案:

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

  • 确保您的 Amazon 账户中存在目标 CodeBuild 服务角色。如果您没有使用控制台,请确保在创建或更新构建项目时没有拼错服务角色的 Amazon 资源名称(ARN)。请注意,IAM 角色区分大小写,因此请检查 IAM 角色的大小写是否正确。

  • 确保目标 CodeBuild 服务角色具有足够的信任权限 CodeBuild。有关更多信息,请参阅 CodeBuild 允许与其他 Amazon 服务进行交互 中的信任关系策略声明。

错误:“调用时出错 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 克隆失败:无法访问 '您的存储库网址': SSL 证书问题:自签名证书”

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

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

建议的解决方案:

  • 编辑您的项目。对于证书,选择从 S3 安装证书。对于证书存储桶,选择存储您的 SSL 证书的 S3 存储桶。对于证书的对象键,键入您的 S3 对象键的名称。

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

    注意

    建议您仅将不安全的 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 区域。

错误:“此构建映像需要至少选择一个运行时版本。”

问题:在运行构建时,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 标准映像 2.0 或更高版本或 Amazon 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: 由... 保留 Amazon。DNS 服务器的 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 映像。

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

错误:“无法从 S3 下载证书。 AccessDenied”

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

可能的原因:

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

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

建议的解决方案:

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

  • 编辑您的项目。对于证书的对象键,键入您的 S3 对象键的名称。

错误:“找不到凭证”

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

可能的原因:

  • 编译环境中 Amazon CLI、 Amazon SDK 或组件的版本与不兼容 Amazon CodeBuild。

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

建议的解决方案:

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

    • Amazon CLI:1.10.47

    • Amazon 适用于 C++ 的 SDK:0.2.19

    • Amazon 适用于 Go 的 SDK:1.2.5

    • Amazon 适用于 Java 的 SDK:1.11.16

    • Amazon 适用于 JavaScript:2.4.7 的 SDK

    • Amazon 适用于 PHP 的 SDK:3.18.28

    • Amazon 适用于 Python 的 SDK (Boto3):1.4.0

    • Amazon 适用于 Ruby 的 SDK:2.3.22

    • Botocore:1.4.37

    • CoreCLR:3.2.6-beta

    • Node.js: 2.4.7

  • 如果您需要在构建环境中运行 Docker 容器并且该容器需要 Amazon 证书,则必须将证书从构建环境传递到容器。在您的 buildspec 文件中,包含与以下内容类似的 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. 在您的 buildspec 文件中,包含与以下内容类似的 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 日志。

  • Amazon S3 中的 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

可能的原因:

  • ssl-bump 未正确配置。

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

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

建议的解决方案:

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

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

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

    2. 创建私有 Amazon S3 终端节点和 CloudWatch 日志终端节点,并将它们与您的 Amazon VPC 的私有子网关联。有关信息,请参阅《Amazon VPC 用户指南》中的 VPC 端点服务

    3. 确认已选中 Amazon VPC 中的启用私有 DNS 名称。有关更多信息,请参阅《Amazon VPC 用户指南》中的创建接口端点

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

    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

可能的原因:Bourne 外壳 (sh) 未包含在您的构建镜像中。 CodeBuild sh需要运行构建命令和脚本。

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

警告:“跳过运行时安装。此构建映像不支持运行时版本选择”(在运行构建时出现)

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

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

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

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

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

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

建议的解决方案:将任何具有 jobId 键的自定义 IAM 角色标签更改为具有其他键,例如 jobIdentifier

构建启动失败

问题:启动构建时,您会收到构建启动失败错误消息。

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

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

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

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

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

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

git rev-parse --git-dir

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

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

可能的原因:

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

  • 服务角色不具备写入存储桶的权限。

建议的解决方案:

  • 更改报告组存储桶所有者,使其与 Amazon S3 存储桶所有者匹配。

  • 修改服务角色来提供写入 Amazon S3 存储桶的权限。

使用以下命令创建 CodeBuild 项目时出现错误:“您的凭证缺少一个或多个必需的权限范围” CodeConnections

问题:使用创建 CodeBuild 项目时 CodeConnections,您无权安装 Bitbucket webhook。

可能的原因:

  • 您的 Bitbucket 账户可能尚未接受新的权限范围。

建议的解决方案:

  • 要接受新权限,您应该已收到 Bitbucket 发送的所有主题为 “需要操作——范围 Amazon CodeStar 已更改” 的电子邮件。notifications-noreply@bitbucket.org该电子邮件包含一个链接,用于向您现有 B CodeConnections itbucket 应用程序安装授予 webhook 权限。

  • 如果您找不到该电子邮件,则可以通过导航到 https://bitbucket.org/site/addons/reauthorize?account=<workspace-name>&addon_key=aws-codestarhttps://bitbucket.org/site/addons/reauthorize?addon_key=aws-codestar,并选择要向 webhook 授予相关权限的工作区来授予权限。

    向 webhook 授予对工作区的权限。

错误:使用 Ubuntu 安装命令构建时出现“Sorry, no terminal at all requested - can't get input”

问题:如果您正在运行 GPU 容器有特权的构建,则可能要按照以下过程安装 NVIDIA 容器工具包。在最新版本的 CodeBuild 镜像中,使用最新的amazonlinux精选镜像 CodeBuild 预安装和配置 d nvidia-container-toolkit ocker。ubuntu按照此过程操作将导致使用 Ubuntu 安装命令进行构建时失败,并出现以下错误:

Running command curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor --no-tty -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg gpg: Sorry, no terminal at all requested - can't get input curl: (23) Failed writing body

可能的原因:gpg 键已存在于同一位置。

建议的解决方案:映像中已安装了 nvidia-container-toolkit。如果您看到这个错误,则可以跳过安装并在 buildspec 中重启 docker 进程。

使用 Secrets Manager OAuth 后,Bitbucket 构建因身份验证错误而失败

问题:使用 Bitbucket 作为源代码提供商构建失败,并出现源证书错误。Bitbucket 连接是使用 OAuth Amazon Secrets Manager 作为存储服务配置的。

可能的原因:Atlassian 对 Bitbucket OAuth 强制使用一次性轮换刷新令牌。每次使用刷新令牌时,Bitbucket 都会使其失效并返回一个新令牌。有关更多信息,请参阅 Atlassian 开发者网站上的 Bitbucket OAuth 一次性刷新令牌 (CHANGE-3052)

推荐的解决方案:向您的 CodeBuild 服务角色添加secretsmanager:PutSecretValue权限。有关所需的 IAM 权限的更多信息,请参阅密钥 Manager-stored 凭证所需的操作