标签: aws-codebuild

CodePipeline:ECR源+ ECS部署配置

基本上,我需要使用ECS容器的Bitbucket源代码配置CI / CD。我想使用CodePipline将新的ECR映像部署到ECS。

当前,AWS CodePipline中没有选项将bitbucket指定为源。但是,我设法通过Webhooks配置CodeBuild,因此它会构建docker文件,并在每次发布发布分支时将其推送到ECR。

我想将ECR配置为CodePipline中的“源”阶段,并将其部署到现有的ECS群集/服务中,因此部署将自动进行。

  • 我在源阶段将“ Amazon ECR”指定为带有“ image_details”输出工件的操作提供程序。
  • 我将“ Amazon ECS”(不是“ Amazon ECS(蓝色/绿色)”)指定为操作提供者,以“ image_details”作为输入工件来进行部署阶段

codepipeline_settings

不幸的是,如果在部署步骤中出现以下错误,则会导致基本配置和工件链接:

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仍在开销中,我正在为该任务寻找更优雅的解决方案。

amazon-ecs aws-codepipeline aws-codebuild aws-ecr

9
推荐指数
2
解决办法
1668
查看次数

AWS CodeBuild GitHub 部署密钥

使用 AWS CodeBuild,您可以将 GitHub 定义为源。如果您的回购是私有的,您可以传递个人令牌。我已经构建了一个 CodeBuild 过程并确认这有效。

我想要做的不是使用个人令牌,而是使用 GitHub 部署密钥对私有存储库进行身份验证。我已经在 GitHub 中设置了 Deploy Key。如何在 AWS CodeBuild 控制台或 YAML 脚本中进行配置?

github amazon-web-services aws-codebuild deploy-keys

9
推荐指数
1
解决办法
2098
查看次数

无法运行 AWS CodeBuild 本地构建脚本

我正在尝试为我的 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)

go amazon-web-services docker aws-codebuild

9
推荐指数
2
解决办法
3523
查看次数

传递 AWS 系统管理器参数存储变量时 Terraform AWS 提供商凭证无效

背景:

我使用 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

9
推荐指数
2
解决办法
3万
查看次数

下载源时,AWS Codebuild失败.消息:访问被拒绝

我创建了一个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

8
推荐指数
2
解决办法
7387
查看次数

DOWNLOAD_SOURCE失败的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

amazon-web-services devops aws-codebuild

8
推荐指数
1
解决办法
4627
查看次数

AWS CodeBuild Github Webhook不会更新PullRequest的状态

使用官方指南,创建的构建项目可以在GitHub PullRequests创建上运行测试。webhook正确显示在GitHub上,在Codebuild中触发了构建,但是,尽管Report build status设置为true,但在Github中未显示构建状态。如果我正确理解了该教程,则Codebuild具有GitHub的本机支持,并且在成功创建Webhook之后,应该为PR提交自动添加新的验证检查,是否有任何建议可以使这项工作正常进行?

github githooks aws-codebuild

8
推荐指数
1
解决办法
1089
查看次数

从 S3 下载工件时代码构建访问被拒绝

我的 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 在下载源时失败。消息:访问被拒绝

如何摆脱拒绝访问的消息?

amazon-web-services aws-codepipeline aws-codebuild

8
推荐指数
1
解决办法
6976
查看次数

DOWNLOAD_SOURCE 上的 AWS CodeBuild 错误:CLIENT_ERROR:未找到主要源和源版本的存储库

我正在尝试使用 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)

terraform aws-codebuild terraform-provider-aws

8
推荐指数
1
解决办法
1万
查看次数

如何将 AWS CodeBuild 配置为仅在推送到主分支时进行构建?

我正在使用 webhook 根据推送请求构建我的项目。默认情况下,AWS CodeBuild 构建在推送到每个分支的基础上,但是我想将其限制为 master - 仅在推送到 master 时触发构建。我如何使用正则表达式模式来做到这一点?

AWS 文档在如何使用那里的正则表达式方面并不是很具体。

amazon-web-services aws-codebuild

8
推荐指数
2
解决办法
2615
查看次数