本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
故障排除 Amazon CodeBuild
使用本主题中的信息来帮助您识别、诊断和解决问题。要了解如何记录和监控 CodeBuild 构建以排查问题,请参阅日志记录和监控.
主题
- 来自错误存储库的 Apache Maven 构建参考构件
- 默认情况下,以根用户身份运行构建命令
- 当文件名包含非美国英语字符时, 构建可能会失败
- 当从 Amazon EC2 参数存储获取参数时,构建可能失败
- CodeBuild 控制台中无法访问分支筛选条件
- 无法查看构建是成功还是失败
- 未向源提供商报告构建状态
- 无法找到并选择 Windows Server Core 2019 平台的基本映像
- 构建规范文件中的前期命令无法被后续命令识别
- Error: 尝试下载缓存时出现 “拒绝访问”
- Error: 使用自定义构建映像时收到 “BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE”
- Error: “Build 容器在完成构建前发现了死信。构建容器因内存不足已停止运行,或者 Docker 映像不受支持。ErrorCode: 500"
- Error: 运行构建时出现 “无法连接到 Docker 守护程序”
- Error: 创建或更新构建项目时收到 “CodeBuild 无权执行:STS: AssmerOole”
- Error: “调用 GetBucketAcl 时出错:要么存储桶拥有者已更改,或者服务角色不再拥有调用 s3: GetBucketAcl 的权限)”
- Error: “上传工件失败:运行构建时,arn “无效”
- Error: “Git 克隆失败:无法访问'your-repository-URL':SSL 证书问题:自签名证书”
- Error: 运行构建时收到错误:“必须使用指定的终端节点来寻址当前尝试访问的存储桶”
- Error: “The 策略的默认版本不是通过增强的零单击角色创建来创建的或不是通过增强的零单击角色创建来创建的最新版本。”
- Error: “此构建映像需要至少选择一个运行时版本。”
- Error: “排队:构建队列中的构建失败时出现错误 “INSUFICIENT_SUBNET”
- Error: “无法下载缓存:RequestError:发送请求失败的原因是:x509:无法加载系统根目录且没有提供根目录”
- Error: “无法从 S3 下载证书。AccessDenied"
- Error: “无法找到凭证”
- 在代理服务器中运行 CodeBuild 时出现超时错误。
- bourne shell (sh) 必须存在于构建映像中
- 警告:运行构建时出现 “跳过运行时安装。此构建映像不支持运行时版本选择”
- Error: 打开 CodeBuild 控制台时 “无法验证 JobWorker 身份”
- AccessDenied
- 在本地缓存版本中访问 GitHub 元
- AccessDenied: 报告组的存储桶拥有者与 S3 存储桶的拥有者不匹配...
来自错误存储库的 Apache Maven 构建参考构件
问题: 当你使用 Maven 与Amazon CodeBuild-提供的 Java 构建环境,Maven 会从安全的 Maven 中央存储库中拉取构建和插件依赖项,https://repo1.maven.org/maven2pom.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>
建议的解决方案:执行以下操作:
-
向源代码中添加
settings.xml
文件。 -
在此
settings.xml
文件中,使用上述settings.xml
格式作为指导,声明您希望 Maven 从哪些存储库中提取构建和插件依赖项。 -
在
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将其默认区域设置为POSIX
.POSIX
本地化设置不太兼容 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 参数存储获取参数时,构建可能失败
问题: 当构建尝试获取存储在 Amazon EC2 Parameter Store 中的一个或多个参数的值时,处于DOWNLOAD_SOURCE
与错误分阶段Parameter does not
exist
.
可能的原因:构建项目所依赖的服务角色没有调用ssm:GetParameters
操作或构建项目使用由生成的服务角色。Amazon CodeBuild并允许调用ssm:GetParameters
操作,但参数的名称不是以开头/CodeBuild/
.
建议的解决方案:
-
如果服务角色不是由 CodeBuild 生成的,请将其定义更新为允许 CodeBuild 调用
ssm:GetParameters
action. 例如,以下策略语句允许调用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 筛选条件之前创建的分支筛选条件,请使用HEAD_REF
使用正则表达式过滤^refs/heads/
. 例如,如果您的分支筛选条件正则表达式是 branchName
$^branchName$
,那么您放入 HEAD_REF
筛选条件的经过更新的正则表达式是 ^refs/heads/branchName$
。有关更多信息,请参阅 Bitbucket Webhook 事件 和 筛选 GitHub Webhook 事件(控制台)。
无法查看构建是成功还是失败
问题: 您无法查看重试构建是成功还是失败。
可能的原因:未启用报告构建状态的选项。
建议的解决方案:启用报告构建状态当你创建或更新 CodeBuild 项目时。此选项告知 CodeBuild 在触发构建时报告状态。有关更多信息,请参阅 。reportBuildStatus中的Amazon CodeBuildAPI 参考.
未向源提供商报告构建状态
问题: 允许向源提供商(例如 GitHub 或 Bitbucket)报告构建状态后,构建状态不会更新。
可能的原因:与源提供商关联的用户没有对存储库的写入权限。
建议的解决方案:为了能够向源提供程序报告构建状态,与源提供程序关联的用户必须具有对存储库的写入权限。如果用户没有写访问权限,则无法更新构建状态。有关更多信息,请参阅源提供者访问权限。
无法找到并选择 Windows Server Core 2019 平台的基本映像
问题: 无法找到或选择 Windows Server Core 2019 平台的基本映像。
可能的原因:你正在使用Amazon不支持此映像的区域。
建议的解决方案:使用以下操作之一:Amazon支持 Windows Server Core 2019 平台的基本映像的区域:
-
美国东部(弗吉尼亚北部)
-
美国东部(俄亥俄)
-
美国西部(俄勒冈)
-
欧洲(爱尔兰)
构建规范文件中的前期命令无法被后续命令识别
问题: 构建规范文件中的一个或多个命令的结果无法被同一 buildspec 文件中的后续命令识别。例如,某个命令可能会设置本地环境变量,但稍后运行的命令可能无法获取该本地环境变量的值。
可能的原因:在 buildspec 文件版本 0.1 中,Amazon CodeBuild在生成环境内默认 Shell 的单独实例中运行各个命令。这表示各个命令独立于其他所有命令而运行。默认情况下,您无法运行依赖于任何先前命令的状态的单个命令。
建议的解决方案:建议您使用构建规范版本 0.2,它能解决此问题。如果您必须使用构建规范版本 0.1,建议您使用 Shell 命令链接运算符(例如,Linux 中的 &&
)将多个命令合并为一个命令。或者,您也可以在源代码中包括一个带有多个命令的 Shell 脚本,然后从 buildspec 文件中的单个命令调用该 Shell 脚本。有关更多信息,请参阅 构建环境中的 Shell 和命令 和 构建环境中的环境变量。
Error: 尝试下载缓存时出现 “拒绝访问”
问题: 当尝试下载已启用缓存的构建项目上的缓存时,您收到Access denied
错误消息。
可能的原因:
-
您刚刚已将缓存配置为您的构建项目的一部分。
-
最近已通过
InvalidateProjectCache
API 使缓存失效。 -
正由 CodeBuild 使用的服务角色对包含缓存的 S3 存储桶没有
s3:GetObject
和s3:PutObject
权限。
建议的解决方案:首次使用时,在更新缓存配置后立即看到此错误是正常的。如果此错误持续存在,则您应该检查您的服务角色对包含缓存的 S3 存储桶是否具有 s3:GetObject
和 s3:PutObject
权限。有关更多信息,请参阅 。指定 S3 权限中的Amazon S3 开发人员指南中).
Error: 使用自定义构建映像时收到 “BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE”
问题: 当您尝试运行使用自定义构建映像的构建时,构建将失败并返回错误。BUILD_CONTAINER_UNABLE_TO_PULL_IMAGE
.
- 可能的原因:构建映像的整体未压缩大小大于构建环境计算类型的可用磁盘空间。要检查构建映像的大小,请使用 Docker 运行
docker images
命令。有关按计算类型分类的可用磁盘空间的列表,请参阅构建环境计算类型。REPOSITORY
:TAG
-
建议的解决方案:对较大的计算类型使用更多的可用磁盘空间,或者减小自定义构建映像的大小。
- 可能的原因: Amazon CodeBuild无权从您的 Amazon Elastic Container Registry (Amazon ECR) 中拉取构建映像。
-
建议的解决方案:更新 Amazon ECR 中的存储库中的权限,以便 CodeBuild 可以将自定义构建映像拉取到构建环境中。有关更多信息,请参见 Amazon ECR 示例。
- 可能的原因:您请求的亚马逊 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 的更多信息,请参阅的亚马逊 ECR 示例 CodeBuild .
Error: “Build 容器在完成构建前发现了死信。构建容器因内存不足已停止运行,或者 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_PROXY
和HTTPS_PROXY
设置,或在构建项目中指定 VPC 配置。
Error: 运行构建时出现 “无法连接到 Docker 守护程序”
问题: 您的构建失败并收到类似于的错误。Cannot connect to the Docker daemon
at unix:/var/run/docker.sock. Is the docker daemon running?
在构建日志中。
可能的原因:您未在特权模式下运行构建。
建议的解决方案:按照以下步骤操作,在特权模式下运行构建:
-
打开 https://console.aws.amazon.com/codebuild/
上的 CodeBuild 控制台。 -
在导航窗格中选择 Build projects (构建项目),然后选择您的生成包。
-
从 Edit (编辑) 中,选择 Environment (环境)。
-
选择 Override images (覆盖映像),然后选择 Environment (环境)。
-
指定环境映像、操作系统、运行时和映像。这些设置应与失败的构建的设置匹配。
-
选择 Privileged (特权)。
注意 默认情况下,Docker 容器不允许访问任何设备。特权模式将授予构建项目的 Docker 容器访问所有设备的权限。有关更多信息,请参阅 Docker 文档网站上的运行时权限和 Linux 功能
。 -
选择 Update environment (更新环境)。
-
选择 Start build (启动构建) 来重试您的生成包。
Error: 创建或更新构建项目时收到 “CodeBuild 无权执行:STS: AssmerOole”
问题: 当您尝试创建或更新构建项目时,您收到错误。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。
-
确保您的目标 CodeBuild 服务角色存在于Amazonaccount. 如果您没有使用控制台,请确保在创建或更新构建项目时没有拼错服务角色的 Amazon 资源名称 (ARN)。
-
确保目标 CodeBuild 服务角色具有足够的权限来信任 CodeBuild。有关更多信息,请参阅 创建 CodeBuild 服务角色 中的信任关系策略声明。
Error: “调用 GetBucketAcl 时出错:要么存储桶拥有者已更改,或者服务角色不再拥有调用 s3: GetBucketAcl 的权限)”
问题: 当您运行构建时,您收到有关 S3 存储桶所有权更改更改的错误,并GetBucketAcl
权限。
可能的原因:您添加了s3:GetBucketAcl
和s3: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: “The 策略的默认版本不是通过增强的零单击角色创建来创建的或不是通过增强的零单击角色创建来创建的最新版本。”
问题: 当您尝试在控制台中更新项目时,更新失败并返回此错误:
可能的原因:
-
您已更新附加到目标 Amazon CodeBuild 服务角色的策略。
-
您已选择附加到目标 CodeBuild 服务角色的策略的较早版本。
建议的解决方案:
-
编辑你的 CodeBuild 项目并清除允许 CodeBuild 修改此服务角色以便它可用于此构建项目。”复选框。验证您正在使用的 CodeBuild 服务角色是否具有足够的权限。如果再次编辑 CodeBuild 项目,则必须再次清除此复选框。有关更多信息,请参阅创建 CodeBuild 服务角色。
-
按照以下步骤操作,编辑 CodeBuild 项目以使用新的服务角色:
-
打开 IAM 控制台并创建新的服务角色。有关更多信息,请参阅创建 CodeBuild 服务角色。
打开Amazon CodeBuild控制台https://console.aws.amazon.com/codesuite/codebuild/home
. -
在导航窗格中,选择 Build projects。
-
选择构建项目旁边的按钮,选择 Edit (编辑),然后选择 Environment (环境)。
-
对于 Service role (服务角色),选择您创建的角色。
-
选择 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.0
CodeBuild 托管映像,您必须在runtime-versions
buildspec 文件的部分。例如,您可以对使用 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: “排队:构建队列中的构建失败时出现错误 “INSUFICIENT_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 和子网大小调整。
Error: “无法下载缓存:RequestError:发送请求失败的原因是:x509:无法加载系统根目录且没有提供根目录”
问题: 当您尝试运行构建项目时,构建失败并出现此错误。
可能的原因:您将缓存配置为您的构建项目的一部分并使用包含过期根证书的较旧 Docker 镜像。
建议的解决方案:更新您的 Amazon CodeBuild 项目中使用的 Docker 镜像。有关更多信息,请参阅提供的 Docker 映像 CodeBuild。
Error: “无法从 S3 下载证书。AccessDenied"
问题: 当您尝试运行构建项目时,构建失败并出现此错误。
可能的原因:
-
您选择了错误的证书 S3 存储桶。
-
您输入了错误的证书对象键。
建议的解决方案:
-
编辑您的项目。对于 Bucket of certificate,选择存储您的 SSL 证书的 S3 存储桶。
-
编辑您的项目。对于 Object key of certificate (证书的对象键),键入您的 S3 对象键的名称。
Error: “无法找到凭证”
问题: 当你尝试运行Amazon CLI,使用Amazon如果您收到与构建直接相关的构建错误,或调用其他类似组件作为构建的一部分,您收到与Amazon CLI、AmazonSDK 或组件。例如,您可能会收到构建错误,如 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 的 SDK: 2.4.7
-
AmazonSDK for PHP: 3.18.28
-
AmazonSDK for Python (Boto3): 1.4.0
-
AmazonSDK 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 构建过程,如下所示。
-
在您的源代码的用于 Docker 映像的 Dockerfile 中,指定以下
ARG
指令。ARG AWS_DEFAULT_REGION ARG AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
-
在您的构建规范文件中,包含与以下内容类似的 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: 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://
来自 Amazon S3。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 Logs 使用私有终端节点:
-
在您的私有子网路由表中,删除您添加的、将发往 Internet 的流量路由到您的代理服务器的规则。想要了解有关信息,请参阅在 VPC 中创建子网中的Amazon VPC User Guide.
-
创建私有 Amazon S3 终端节点和 CloudWatch Logs 终端节点,并将其与 Amazon VPC 的私有子网关联。想要了解有关信息,请参阅VPC 终端节点服务中的Amazon VPC User Guide.
-
确认启用私有 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
.
可能的原因:Bourne 壳 (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 控制台时 “无法验证 JobWorker 身份”
问题: 打开 CodeBuild 控制台时,将显示 “无法验证 JobWorker 身份” 错误消息。
可能的原因:用于控制台访问的 IAM 角色有一个标签jobId
作为关键。此标签密钥是为 CodeBuild 保留的,如果存在,将导致此错误。
建议的解决方案:更改拥有密钥的任何自定义 IAM 角色标签jobId
有不同的钥匙,例如jobIdentifier
.
AccessDenied
问题: 开始构建时,您会收到AccessDenied错误消息。
可能的原因:已达到并发构建数。
建议的解决方案:等到其他构建完成,或者增加项目的并发构建限制,然后重新开始构建。有关更多信息,请参阅项目配置。
在本地缓存版本中访问 GitHub 元
问题: 在某些情况下,缓存版本中的 .git 目录是文本文件,而不是目录。
可能的原因:当为构建启用本地源代码缓存时,CodeBuild 会为.git
“目录”。这意味着.git
目录实际上是包含此目录路径的文本文件。
建议的解决方案:在所有情况下,都可以使用以下命令获取 Git 元数据目录。无论格式如何,此命令都可以正常工作.git
:
git rev-parse --git-dir
AccessDenied: 报告组的存储桶拥有者与 S3 存储桶的拥有者不匹配...
问题: 当将测试数据上传到 Amazon S3 存储桶时,CodeBuild 无法将测试数据写入存储桶。
可能的原因:
-
指定为报表组存储桶拥有者的账户与 Amazon S3 存储桶的拥有者不匹配。
-
该服务角色没有对存储桶的写入访问权限。
建议的解决方案:
-
更改报告组存储桶拥有者以匹配 Amazon S3 存储桶的拥有者。
-
修改服务角色以允许 Amazon S3 存储桶写入访问权限。