Amazon CodeBuild 故障排除 - Amazon CodeBuild
来自错误存储库的 Apache Maven 构建参考构件默认情况下,以根用户身份运行构建命令当文件名包含非美国英语字符时, 构建可能会失败当从 Amazon EC2 Parameter Store 获取参数时,构建可能失败无法在 CodeBuild 控制台中访问分支筛选条件 无法查看构建是成功还是失败 未向源提供程序报告构建状态无法找到并选择 Windows Server Core 2019 平台的基本映像 构建规范文件中的前期命令无法被后续命令识别Error: 尝试下载缓存时出现 “拒绝访问”Error: 使用自定义构建映像时出现 “构建 _ 容器 _ 不可用 _ 拉尔 _ 映像” Error: “构建容器在完成构建前发现了死信。构建容器因内存不足已停止运行,或者 Docker 映像不受支持。ErrorCode: 500 英寸 Error: 运行构建时出现 “无法连接到 Docker 守护程序”Error: 运行构建时出现 “CodeBuild 遇到了一个问题”Error: 创建或更新构建项目时收到 “CodeBuild 无权执行:ST: AssumeRole” Error: “调用获取存储桶时出错:存储桶拥有者已更改,或者服务角色不再拥有调用 s3: GetBucketAcl” Error: “无法上传对象:运行构建时,arn” 无效Error: “Git 克隆失败:无法访问'your-repository-URL':SSL 证书问题:自签名证书”Error: 运行构建时收到 “必须使用指定的终端节点来寻址当前尝试访问的存储桶”Error: “策略的默认版本不是通过增强的零单击角色创建来创建的或不是通过增强的零单击角色创建来创建的最新版本。”Error: “此构建映像需要至少选择一个运行时版本。”Error: “排队时间: 构建队列中的构建失败时出现不足之处Error: “无法下载缓存:RequestError:发送请求失败,原因是:x509:无法加载系统根目录,也没有提供根目录”Error: “无法从 S3 下载证书。AccessDenied"Error: “无法找到凭证” 在代理服务器中运行 CodeBuild 时出现 RequestErrorbourne shell (sh) 必须存在于构建映像中警告:运行构建时收到 “跳过运行时安装。此构建映像不支持运行时版本选择”Error: “无法验证工作人员身份”构建无法启动访问本地缓存构建中的 GitHub 元数据AccessDenied: 报告组的存储桶拥有者与 S3 存储桶的拥有者不匹配...
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon CodeBuild 故障排除

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

主题

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

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

可能的原因: 代码构建提供的 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 以及包含非美国英语 字符和可能导致相关构建失败的文件名。

建议的解决方案: 将将以下命令添加到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

对于基于 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:GetParametersaction. 例如,以下策略语句允许调用 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 Parameter Store 中名称并非以开头的参数。/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 筛选条件之前创建的分支筛选条件,请使用HEAD_REF使用正则表达式过滤器^refs/heads/branchName$。例如,如果您的分支筛选条件正则表达式是 ^branchName$,那么您放入 HEAD_REF 筛选条件的经过更新的正则表达式是 ^refs/heads/branchName$。有关更多信息,请参阅 Bitbucket Webhook 事件筛选 GitHub Webhook 事件(控制台)

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

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

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

建议的解决方案: Enable (启用 Gem)报告构建状态当您创建或更新 CodeBuild 项目时。此选项告知 CodeBuild 在触发构建时报告状态。有关更多信息,请参阅 。ReportBuildStatus中的Amazon CodeBuildAPI 参考

未向源提供程序报告构建状态

问题: 允许向源提供程序(如 GitHub 或 Bitbucket)报告构建状态后,构建状态不会更新。

可能的原因: 与源提供程序关联的用户没有对仓库的写入访问权限。

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

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

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

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

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

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

  • 美国东部 (俄亥俄)

  • 美国西部 (俄勒冈)

  • 欧洲(爱尔兰)

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

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

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

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

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

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

可能的原因:

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

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

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

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

Error: 使用自定义构建映像时出现 “构建 _ 容器 _ 不可用 _ 拉尔 _ 映像”

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

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

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

可能的原因: Amazon CodeBuild无权从您的 Amazon Elastic Container Registry (Amazon ECR) 中拉取构建映像。

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

可能的原因: 您请求的 Amazon ECR 映像在Amazon您的区域Amazon帐户正在使用。

建议的解决方案: 使用亚马逊 ECR 图片,该图片位于同一Amazon区域作为您的Amazon帐户正在使用。

可能的原因: 您正在使用不具有公共 Internet 访问权限的 VPC 中的私有注册表。CodeBuild 无法从 VPC 中的私有 IP 地址拉取映像。有关更多信息,请参阅 私有注册机构Amazon Secrets Manager用于 CodeBuild 的示例

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

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

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

Error: “构建容器在完成构建前发现了死信。构建容器因内存不足已停止运行,或者 Docker 映像不受支持。ErrorCode: 500 英寸

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

可能的原因:

  • 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 配置。

Error: 运行构建时出现 “无法连接到 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 功能

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

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

Error: 运行构建时出现 “CodeBuild 遇到了一个问题”

问题: 当您尝试运行构建项目时,您收到此错误,在构建的PROVISIONING阶段。

可能的原因: 您的构建使用的环境变量对Amazon CodeBuild。当所有环境变量的长度 (所有名称和值加在一起) 超出最大组合长度 (约 5,500 个字符) 时,CodeBuild 可能引发错误。

建议的解决方案: 使用 Amazon EC2 Systems Manager 参数存储存储大型环境变量,然后从您的构建规范文件中检索它们。Amazon EC2 Systems Manager 参数存储可以存储组合长度为 4,096 个字符或更少的字符的独立环境变量 (名称和值加在一起)。要存储大型环境变量,请参阅Systems Manager Parameter StoreSystems Manager Parameter Store 控制台演练中的Amazon EC2 Systems Manager 用户指南。要检索它们,请参阅构建规范语法中的 parameter-store 映射。

Error: 创建或更新构建项目时收到 “CodeBuild 无权执行:ST: 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 区域激活。有关更多信息,请参阅 。激活和停用Amazon STS在Amazon区域中的IAM 用户指南

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

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

Error: “调用获取存储桶时出错:存储桶拥有者已更改,或者服务角色不再拥有调用 s3: GetBucketAcl”

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

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

建议的解决方案: 验证您是 S3 存储桶的拥有者,然后再次将权限添加到您的 IAM 角色。有关更多信息,请参阅对 S3 存储桶的安全访问

Error: “无法上传对象:运行构建时,arn” 无效

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

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

建议的解决方案: 更新构建项目的设置,以指向位于同一Amazon区域作为构建项目。

Error: “Git 克隆失败:无法访问'your-repository-URL':SSL 证书问题:自签名证书”

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

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

建议的解决方案:

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

  • 编辑您的项目。选择 Insecure SSL (不安全的 SSL),在连接到您的 GitHub Enterprise Server 项目存储库时忽略 SSL 警告。

    注意

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

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

问题: 运行构建时,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不同于Amazon CodeBuild构建项目。

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

Error: “策略的默认版本不是通过增强的零单击角色创建来创建的或不是通过增强的零单击角色创建来创建的最新版本。”

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

可能的原因:

  • 您已更新附加到目标 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 (更新环境)

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

问题: 运行构建时,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.0CodeBuild 托管映像,则必须在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

Error: “排队时间: 构建队列中的构建失败时出现不足之处

问题: 构建队列中的构建失败,出现类似于的错误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 DNS 服务器中的Amazon VPC 用户指南

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

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

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

Error: “无法下载缓存:RequestError:发送请求失败,原因是:x509:无法加载系统根目录,也没有提供根目录”

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

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

建议的解决方案: 更新您的 Amazon CodeBuild 项目中使用的 Docker 镜像。有关更多信息,请参阅CodeBuild 提供的码头映像

Error: “无法从 S3 下载证书。AccessDenied"

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

可能的原因:

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

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

建议的解决方案:

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

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

Error: “无法找到凭证”

问题: 当您尝试运行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

    • AmazonSDK for C++ 开发工具包:0.2.19

    • AmazonSDK for Go 开发工具包:1.2.5

    • AmazonSDK for Java:1.11.16

    • Amazon适用于 JavaScript 的开发工具包:2.4.7

    • AmazonSDK for PHP:3.18.28

    • AmazonSDK for Python (Boto3) 的开发工具包:1.4.0

    • Amazon适 SDK for Ruby: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 .

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

问题: 您会收到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 Logs。

  • 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从 Amazon S3 发现构建容器。

可能的原因:

  • ssl-bump 未正确配置。

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

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

建议的解决方案:

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

  • 请按照以下步骤操作,为 Amazon S3 和 CloudWatch Logs 使用私有终端节点:

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

    2. 创建私有 Amazon S3 终端节点和 CloudWatch Logs 终端节点,然后将其与您的 Amazon VPC 私有子网关联。想要了解有关信息,请参阅VPC 终端节点服务中的Amazon 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在其构建映像中。)

警告:运行构建时收到 “跳过运行时安装。此构建映像不支持运行时版本选择”

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

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

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

Error: 打开 CodeBuild 控制台时 “无法验证作业工作者身份”

问题: 当您打开 CodeBuild 控制台时,将显示 "无法验证 JobWorker 身份" 错误消息。

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

建议的解决方案: 更改具有密钥的任何自定义 IAM 角色标签jobId设置为具有不同的密钥,例如jobIdentifier

构建无法启动

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

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

建议的解决方案: 等待其他构建完成,或者增加项目的同意构建限制,然后再次启动构建。有关更多信息,请参阅Project Configuration

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

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

可能的原因: 当为构建启用本地源缓存时,CodeBuild 会为.git目录。这意味着.git目录实际上是包含此目录路径的文本文件。

建议的解决方案: 在所有情况下,请使用以下命令获取 Git 元数据目录。这个命令将工作,无论.git

git rev-parse --git-dir

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

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

可能的原因:

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

  • 服务角色不具有对存储桶的写入访问权限。

建议的解决方案:

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

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