本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
适用于的 Amazon ECR 示例CodeBuild
此示例使用 Amazon EElastic Container Registry (Amazon ECR) 映像存储库中的 Docker 映像生成示例 Go 项目。
运行该示例可能会导致您的 Amazon 账户产生相关费用。其中包括可能的费用Amazon CodeBuild而且对于Amazon与亚马逊 S3 相关的资源和操作,Amazon KMS、CloudWatch日志和亚马逊 ECR。有关更多信息,请参阅 。CodeBuild定价
运行示例
要运行此示例,请执行以下操作:
-
要创建 Docker 映像并将其推送到 Amazon ECR 中的映像存储库,请完成的 “运行示例” 部分的步骤。Docker 示例.
-
创建 Go 项目:
-
创建文件,如中所述Go 项目结构和Go 项目文件然后将其上传到 S3 输入存储桶或Amazon CodeCommit、GitHub,或者 Bitbucket 存储库。
重要 请不要上传
,而只上传(root directory name)
中的文件。(root directory name)
如果您使用的是 S3 输入存储桶,请务必创建一个包含文件的 ZIP 文件,然后将其上传到输入存储桶。请不要将
添加到 ZIP 文件中,而只添加(root directory name)
中的文件。(root directory name)
-
请按照 直接运行 Amazon CodeBuild 中的步骤创建构建项目、运行构建并查看相关构建信息。
如果您使用 Amazon CLI 创建构建项目,则
create-project
命令的 JSON 格式输入可能与此类似。(请将占位符替换为您自己的值。){ "name": "sample-go-project", "source": { "type": "S3", "location": "codebuild-
region-ID
-account-ID
-input-bucket/GoSample
.zip" }, "artifacts": { "type": "S3", "location": "codebuild-region-ID
-account-ID
-output-bucket", "packaging": "ZIP", "name": "GoOutputArtifact
.zip" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:4.0", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "arn:aws:iam::account-ID
:role/role-name
", "encryptionKey": "arn:aws:kms:region-ID
:account-ID
:key/key-ID
" } -
要获取构建输出构件,请打开您的 S3 输出存储桶。
-
将
文件下载到您的本地计算机或实例,然后提取该文件的内容。在提取出来的内容中,获取GoOutputArtifact
.ziphello
文件。
-
-
如果满足以下条件之一,则必须向 Amazon ECR 中的映像存储库添加权限,以便Amazon CodeBuild可以将其 Docker 映像拉入构建环境中。
-
你的项目使用CodeBuild获取 Amazon ECR 映像的凭据。这是由
ProjectEnvironment
的imagePullCredentialsType
属性中的CODEBUILD
值指示的。 -
您的项目使用了跨账户 Amazon ECR 映像。在这种情况下,您的项目必须使用其服务角色拉取 Amazon ECR 映像。要启用此行为,请将您的
ProjectEnvironment
的imagePullCredentialsType
属性设置为SERVICE_ROLE
。
打开位于 https://console.aws.amazon.com/ecr/
的 Amazon ECR 控制台。 -
在存储库名称列表中,选择您创建或选择的存储库的名称。
-
在导航窗格中,依次选择 Permissions (权限)、Edit (编辑) 和 Add statement (添加语句)。
-
对于 Statement name (声明名称),输入标识符(例如
CodeBuildAccess
)。 -
对于 Effect (效果),选择 Allow (允许)。这表示您希望允许访问另一个 Amazon 账户。
-
对于 Principal (委托人),执行以下操作之一:
-
如果你的项目使用CodeBuild用于拉取亚马逊 ECR 映像的凭据服务委托人输入,输入
codebuild.amazonaws.com
. -
如果您的项目使用了跨账户 Amazon ECR 映像,Amazon账户 ID中,输入Amazon要授予访问权的账户。
-
-
跳过 All IAM entities (所有 IAM 实体) 列表。
-
适用于操作中,选择仅拉动作:ECR:GetDownloadUrlFor层、ECR:BatchGetImage, 和ECR:BatchCheckLayerAvailability.
-
请选择保存。
此策略显示在 Permissions (权限) 中。委托人是您在此过程的步骤 3 中为 Principal (委托人) 输入的内容:
-
如果你的项目使用CodeBuild获取 Amazon ECR 映像的凭证,
"codebuild.amazonaws.com"
出现在服务委托人. -
如果您的项目使用了跨账户亚马逊 ECR 映像,Amazon要授予访问权限的账户显示在下面Amazon账户 ID.
以下示例策略使用两者:CodeBuild凭证和跨账户 Amazon ECR 映像。
{ "Version":"2012-10-17", "Statement":[ { "Sid":"CodeBuildAccessPrincipal", "Effect":"Allow", "Principal":{ "Service":"codebuild.amazonaws.com" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] }, { "Sid":"CodeBuildAccessCrossAccount", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::
<AWS-account-ID>
:root" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] } -
-
-
请按照 直接运行 CodeBuild 中的步骤创建构建项目、运行构建并查看相关构建信息。
如果您使用 Amazon CLI 创建构建项目,则
create-project
命令的 JSON 格式输入可能与此类似。(请将占位符替换为您自己的值。){ "name": "amazon-ecr-sample-project", "source": { "type": "S3", "location": "codebuild-
region-ID
-account-ID
-input-bucket/GoSample
.zip" }, "artifacts": { "type": "S3", "location": "codebuild-region-ID
-account-ID
-output-bucket", "packaging": "ZIP", "name": "GoOutputArtifact
.zip" }, "environment": { "type": "LINUX_CONTAINER", "image": "account-ID
.dkr.ecr.region-ID
.amazonaws.com/your-Amazon-ECR-repo-name
:tag
", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "arn:aws:iam::account-ID
:role/role-name
", "encryptionKey": "arn:aws:kms:region-ID
:account-ID
:key/key-ID
" } -
要获取构建输出构件,请打开您的 S3 输出存储桶。
-
将
文件下载到您的本地计算机或实例,然后提取GoOutputArtifact
.zip
文件的内容。在提取出来的内容中,获取GoOutputArtifact
.ziphello
文件。
Go 项目结构
此示例假定有这样一个目录结构。
(root directory name)
├── buildspec.yml
└── hello.go
Go 项目文件
此示例将使用这些文件。
buildspec.yml
(在
)(root directory
name)
version: 0.2 phases: install: runtime-versions: golang: 1.13 build: commands: - echo Build started on `date` - echo Compiling the Go code - go build hello.go post_build: commands: - echo Build completed on `date` artifacts: files: - hello
hello.go
(在
)(root directory
name)
package main import "fmt" func main() { fmt.Println("hello world") fmt.Println("1+1 =", 1+1) fmt.Println("7.0/3.0 =", 7.0/3.0) fmt.Println(true && false) fmt.Println(true || false) fmt.Println(!true) }
相关资源
有关 Amazon CodeBuild 入门的信息,请参阅通过控制台开始使用 Amazon CodeBuild。
有关解决 CodeBuild 中的问题的信息,请参阅故障排除 Amazon CodeBuild。
有关 CodeBuild 中的配额的信息,请参阅Amazon CodeBuild 的配额。