基本上,我需要使用ECS容器的Bitbucket源代码配置CI / CD。我想使用CodePipline将新的ECR映像部署到ECS。
当前,AWS CodePipline中没有选项将bitbucket指定为源。但是,我设法通过Webhooks配置CodeBuild,因此它会构建docker文件,并在每次发布发布分支时将其推送到ECR。
我想将ECR配置为CodePipline中的“源”阶段,并将其部署到现有的ECS群集/服务中,因此部署将自动进行。
不幸的是,如果在部署步骤中出现以下错误,则会导致基本配置和工件链接:
Invalid action configuration
The image definition file imageDetail.json contains invalid JSON format
Run Code Online (Sandbox Code Playgroud)
尽管“ Amazon ECR”阶段将imageDetail.json作为输出工件提供,但“ Amazon ECS”部署提供程序似乎并不期望这样做。有什么合理的方法解决这个问题吗?
我知道,可以使用bitbucket + API Gateway / Lambda + CodePipeline配置CI / CD,我也考虑使用CodeCommit代替bitbucket作为源存储库-仍然,希望有一种可能的优雅解决方案,将bitbucket与直接使用CodePipeline。
UPD: 我得到的配置非常好,如本博文所述:总体思路是允许CodeBuild将源代码从bitbucket上传到S3,然后使用CodePipeline和S3作为源将新的docker映像部署到ECR并发布ECS集群中新的任务定义修订。S3仍在开销中,我正在为该任务寻找更优雅的解决方案。
使用 AWS CodeBuild,您可以将 GitHub 定义为源。如果您的回购是私有的,您可以传递个人令牌。我已经构建了一个 CodeBuild 过程并确认这有效。
我想要做的不是使用个人令牌,而是使用 GitHub 部署密钥对私有存储库进行身份验证。我已经在 GitHub 中设置了 Deploy Key。如何在 AWS CodeBuild 控制台或 YAML 脚本中进行配置?
我正在尝试为我的 golang 项目在本地运行 CodeBuild。我已经拉取amazon/aws-codebuild-local:latest了 docker镜像并运行了 CodeBuild 脚本./codebuild_build.sh -i aws/codebuild/standard:2.0 -s "/project/src",什么也没发生。然后我捕获了脚本中生成的 docker 命令:docker run -it -v //var/run/docker.sock:/var/run/docker.sock -e "IMAGE_NAME=aws/codebuild/standard:2.0" -e "SOURCE=/project/src" -e "INITIATOR=me" amazon/aws-codebuild-local:latest.
当我运行 docker 命令时,出现以下错误:
Removing network agent-resources_default
Removing volume agent-resources_source_volume
Removing volume agent-resources_user_volume
Creating network "agent-resources_default" with the default driver
Creating volume "agent-resources_source_volume" with local driver
Creating volume "agent-resources_user_volume" with local driver
Pulling build (aws/codebuild/standard:2.0)...
ERROR: The image for the service you're trying to recreate has been removed. If you continue, …Run Code Online (Sandbox Code Playgroud) 背景:
我使用 AWS CodeBuild buildspec.yml 迭代 GitHub 存储库中的目录,以使用 Terraform 应用 IaC。为了访问 Terraform AWS 提供商所需的凭证,我使用 AWS 系统管理器参数存储来检索 buildspec.yml 中的访问权限和密钥。
问题:
系统管理器参数存储屏蔽了访问权限和密钥环境值,因此当 Terraform AWS 提供程序继承它们时,提供程序会输出凭证无效:
Error: error configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: InvalidClientTokenId: The security token included in the request is invalid.
status code: 403, request id: xxxx
Run Code Online (Sandbox Code Playgroud)
要重现该问题:
创建系统管理器参数存储变量(TF_VAR_AWS_ACCESS_KEY_ID=访问权限,TF_AWS_SECRET_ACCESS_KEY=秘密)
使用以下命令创建 AWS CodeBuild 项目:
"source": {
"type": "NO_SOURCE",
}
"environment": {
"type": "LINUX_CONTAINER",
"image": "aws/codebuild/standard:4.0",
"computeType": "BUILD_GENERAL1_SMALL"
}
Run Code Online (Sandbox Code Playgroud)
buildspec.yml具有以下内容:(修改为创建 .tf 文件而不是从 github 采购)
version: 0.2 …Run Code Online (Sandbox Code Playgroud) amazon-web-services terraform aws-codebuild aws-parameter-store
我创建了一个CodeBuild项目,它使用了node8的docker镜像.CodeBuild项目的目的是进行单元测试.它需要CodeCommit的输入工件.在buildspec.yml中,它运行一个测试命令.
这是我的(简单)buildspec文件:
version: 0.2
phases:
install:
commands:
- echo "install phase started"
- npm install
- echo "install phase ended"
pre_build:
commands:
- echo "pre_build aka test phase started"
- echo "mocha unit test"
- npm test
- echo "mocha unit test ended"
build:
commands:
- echo "build phase started"
- echo "build complete"
Run Code Online (Sandbox Code Playgroud)
DOWNLOAD_SOURCE阶段的构建失败,具有以下内容:
PHASE - DOWNLOAD_SOURCE
2分钟前的开始时间
结束时间 2分钟前
消息 访问被拒绝
构建日志中的唯一日志如下
[集装箱] 2018/01/12 11:30:22等待代理人ping
[集装箱] 2018/01/12 11:30:22等待DOWNLOAD_SOURCE
提前致谢.
CodeBuild政策的屏幕截图.
amazon-web-services node.js amazon-elastic-beanstalk aws-codepipeline aws-codebuild
每当我启动AWS CodeBuild时,我每次都会遇到这种类型的错误.请帮忙.
DOWNLOAD_SOURCE失败3分钟,2秒
获取 https://github.com/themithunbiswas/test-repo.git/info/refs?service=git-upload-pack:拨打tcp 192.30.253.113:443:i/o timeout
使用官方指南,创建的构建项目可以在GitHub PullRequests创建上运行测试。webhook正确显示在GitHub上,在Codebuild中触发了构建,但是,尽管Report build status设置为true,但在Github中未显示构建状态。如果我正确理解了该教程,则Codebuild具有GitHub的本机支持,并且在成功创建Webhook之后,应该为PR提交自动添加新的验证检查,是否有任何建议可以使这项工作正常进行?
我的 CodeBuild 配置了 CodePipeline。S3 是我的神器商店。尽管附加了具有足够访问权限的 IAM 角色,但我仍然收到拒绝访问的消息。
错误消息的屏幕截图
我已经检查了与 Codebuild 关联的服务角色。它附有以下政策。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build",
"arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build:*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-ap-southeast-1-*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion"
]
}
]
Run Code Online (Sandbox Code Playgroud)
}
但是当我使用 IAM 策略验证器对其进行测试时,我收到以下错误消息。
根据这个问题的公认答案,我目前拥有的策略应该允许我从 S3 获取工件而不会出现任何问题 - AWS Codebuild 在下载源时失败。消息:访问被拒绝
如何摆脱拒绝访问的消息?
我正在尝试使用 Terraform 创建一个 CodeBuild 项目,但是当我构建时,在 DOWNLOAD_SOURCE 步骤中出现以下错误:
CLIENT_ERROR:未找到主要源和源版本的存储库
该项目使用 CodeCommit 存储库作为源。这很奇怪,因为从 CodeCommit 控制台 GUI 到存储库的所有链接都适用于此构建 - 我可以看到提交,单击链接并访问 CodeCommit 存储库等,因此源设置似乎没问题。用于构建的策略对存储库具有“codecommit:GitPull”权限。
奇怪的是,如果我转到控制台中的构建并取消选中“允许 AWS CodeBuild 修改此服务角色,以便它可以与此构建项目一起使用”复选框,然后更新源,构建将起作用!但是我找不到从 Terraform 设置它的任何方法,如果您返回到“更新源”屏幕,它将默认重新打开。
这是我用来创建构建的 Terraform 代码。
# IAM role for CodeBuild
resource "aws_iam_role" "codebuild_myapp_build_role" {
name = "mycompany-codebuild-myapp-build-service-role"
description = "Managed by Terraform"
path = "/service-role/"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "codebuild.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
}
# IAM policy for the CodeBuild role
resource "aws_iam_policy" …Run Code Online (Sandbox Code Playgroud) 我正在使用 webhook 根据推送请求构建我的项目。默认情况下,AWS CodeBuild 构建在推送到每个分支的基础上,但是我想将其限制为 master - 仅在推送到 master 时触发构建。我如何使用正则表达式模式来做到这一点?
AWS 文档在如何使用那里的正则表达式方面并不是很具体。
aws-codebuild ×10
github ×2
terraform ×2
amazon-ecs ×1
aws-ecr ×1
deploy-keys ×1
devops ×1
docker ×1
githooks ×1
go ×1
node.js ×1