标签: aws-codebuild

使用 docker-compose 为 AWS CodeBuild 创建自定义构建映像

我正在尝试创建自定义 docker 映像,以便将其用作 AWS CodeBuild 的构建映像。docker build如果我只是通过设置环境来针对 Dockerfile进行操作,则效果很好。但现在我需要添加一个 postgres 实例来运行测试。所以我认为使用docker-compose可以解决问题。但是我无法弄清楚如何使其发挥作用。当我尝试时,组合的静态部分(来自 Dockerfile 的图像)似乎立即停止docker-compose up,因为没有入口点。此时,我可以通过运行连接到数据库实例docker-compose run db psql -h db -U testdb -d testdb。但是,当我构建它并将其提供给 AWS 提供的脚本时,它运行良好,直到我的测试尝试到达数据库服务器。这是它因超时而失败的地方,就好像没有数据库实例一样。

配置看起来像这样:

version: '3.7'

services:
  api-build:
    tty: true
    build: ./api_build
    image: api-build
    depends_on:
      - db

  db:
    image: postgres:10-alpine
    restart: always
    environment:
      POSTGRES_USER: testdb
      POSTGRES_PASSWORD: testdb
Run Code Online (Sandbox Code Playgroud)

和 Dockerfile 下./api_build

FROM alpine:3.8

FROM ruby:2.3-alpine as rb

RUN apk update && apk upgrade && \
      echo @edge http://nl.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose aws-codebuild

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

由于身份验证问题,在连接 Amazon EKS 集群的 AWS CodeBuild 上执行 kubectl 不起作用

kubectl version在 CodeBuild 上打印错误...

\n\n
[Container] 2019/08/26 04:07:32 Running command kubectl version \nClient Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"} \nerror: You must be logged in to the server (the server has asked for the client to provide credentials)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

错误:您必须登录到服务器(服务器已要求客户端提供凭据)

\n
\n\n

我正在使用 Amazon EKS 集群。\n似乎缺少一些身份验证设置...?

\n\n

我做了什么:

\n\n
    \n
  1. codebuild-hoge-service-role设置代码构建项目(创建新的服务角色)。
  2. \n
  3. 将策略添加eks:DescribeCluster到角色作为内联策略,因为aws eks update-kubeconfig需要它。
  4. \n
  5. 编辑以在本地设备上configmap/aws-auth绑定角色和 RBAC ,添加新配置:kubectl edit -n kube-system configmap/aws-authmapRoles
  6. \n
\n\n …

amazon-iam kubernetes kubectl aws-codebuild amazon-eks

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

AWS ECS Blue/Green CodePipeline:尝试读取图像工件时出现异常

我想创建一个 CodePipeline,它从 CodeCommit 源构建一个容器映像,然后以蓝/绿方式将新映像部署到我的 ECS 服务(EC2 启动类型)。

  • 源阶段是 CodeCommit,它已经包含 appspec.json
    和 taskdef.json
  • 构建阶段正在构建新容器并将其成功推送到 ECR,文件 imagedefinition.json 是在此步骤创建的 BuildArtifact,包含容器和最近创建的镜像,其标签对应于 CodeCommit commit-id。
  • 部署阶段由操作“Amazon ECS(蓝/绿)”组成,使用 SourceArtifact 和 BuildArtifact 作为 InputArtifact,从 SourceArtifact 获取 appspec 和 taskdef,从 BuildArtifact 获取图像描述,最终在 Blue/ 中部署新容器绿色方式。

问题出在 BuildArtifact 的图像定义上。管道在部署阶段失败并出现错误:

"" 尝试从工件中读取图像工件文件时出现无效的操作配置异常:BuildArtifact。“”

如何正确配置“Amazon ECS(蓝/绿)”部署阶段,以便它可以使用最近创建的映像并部署它....通过替换 taskdef.json 中的占位符 IMAGE_NAME ?

任何提示高度赞赏:D

amazon-ecs blue-green-deployment aws-code-deploy aws-codepipeline aws-codebuild

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

AWS:CodeDeploy for Lambda 无法读取应用程序规范

我正在尝试设置 CodePipeline 来管理一个非常简单的 Lambda 函数的部署。

我完全陷入了部署步骤的问题,无法弄清楚可能出了什么问题。

当管道尝试运行 CodeDeploy 操作时,它失败并显示错误...

BundleType must be either YAML or JSON

这是我的应用程序规范...

version: 0.0
Resources:
  - my-function:
      Type: AWS::Lambda::Function
      Properties:
        Name: "my-function"
Run Code Online (Sandbox Code Playgroud)

我的管道没有构建步骤,因为它只是一个简单的 js 文件,没有依赖项,因此不需要构建。

我尝试添加一个操作来部署到 S3,我可以确认发送到 s3 的 zip 文件包含 appspec.yml 和 index.js,并且它们都位于根目录中。

我见过的大多数示例都使用构建规范,但我不确定为什么我需要这个,或者如果我有一个它会做什么。

aws-lambda aws-codepipeline aws-codebuild

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

AWS CodePipeline 部署到 Elastic Beanstalk 后丢失目录/文件

这是源于我之前的问题的一个更狭窄的问题。

这是我的 buildspec.yml:

version: 0.2

phases:
  install:
    commands:
      # upgrade AWS CLI
      - pip install --upgrade awscli
      # install Node 12
      - curl -sL https://deb.nodesource.com/setup_12.x | bash -
      - apt install nodejs

  pre_build:
    commands:
      # install server dependencies
      - npm install
  build:
    commands:
      # install client dependencies and build static files
      - npm install --prefix client && npm run build --prefix client

  post_build:
    commands:
      # FOR TESTING AND DEBUGGING
      - ls -la
      - ls client -la
      - mkdir client/TEST …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js amazon-elastic-beanstalk aws-codepipeline aws-codebuild

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

使用 Terraform 构建 AWS Codebuild 中的多个环境变量

我正在使用 Terraform 配置 AWS CodeBuild。在环境部分,我配置了以下内容:

  environment {
    compute_type                = "BUILD_GENERAL1_SMALL"
    image                       = "aws/codebuild/standard:3.0"
    type                        = "LINUX_CONTAINER"
    image_pull_credentials_type = "CODEBUILD"

    environment_variable {
      name  = "SOME_KEY1"
      value = "SOME_VALUE1"
    }

    environment_variable {
      name  = "SOME_KEY2"
      value = "SOME_VALUE2"
    }

  }
Run Code Online (Sandbox Code Playgroud)

我的 Codebuild 项目中有 20 多个环境变量需要配置。

是否可以创建一个列表并定义一个 environment_variable 参数来配置所有环境变量?

amazon-web-services terraform aws-codebuild terraform-provider-aws

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

如何将 S3 存储桶中的文件添加到 AWS CodePipeline 中的输出工件?(节点JS)

我正在使用 AWS CodePipeline,它从我的 git 存储库获取源代码,使用CodeBuildbuildSpec 构建输出工件并将其保存到 S3 存储桶,最终部署到Elastic BeanStalk(NodeJS 环境)。

一切正常,但我需要管道从我的AWS S3存储桶之一复制 1 个特定文件并将其添加到,output artifacts然后再将其部署到EB

可以使用 buildSpec 来完成吗?

artifacts:
  files:
    - '**/*'
    # - How to add a file from S3 to the artifacts?
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services aws-codepipeline aws-codebuild buildspec

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

CodeBuild 错误:受信任的主体不属于该服务

我正在尝试编辑现有 CodeBuild 项目的源代码。我在过滤器组中添加了一个演员 ID。当我尝试保存时,我收到:

The trusted principals don't belong to the service.

我也尝试过其他更改 - 我总是收到相同的错误。我是一名管理员,拥有该项目的完全访问权限。我缺少什么?

amazon-web-services aws-codebuild

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

来自CodePipeline(AWS)的CodeBuild(AWS)

我试图使用CodePipeline(AWS)触发多个构建,并且当管道触发CodeBuild时,CodeBuild失败并出现下一个错误:

[Container] 2018/02/07 19:30:20 Waiting for DOWNLOAD_SOURCE
Run Code Online (Sandbox Code Playgroud)

消息:访问被拒绝

额外的信息:

  • 来源来自Github
  • 如果我启动CodeBuild,则手动运行会非常完美。

在此处输入图片说明

在此处输入图片说明

github amazon-web-services aws-codepipeline aws-codebuild

0
推荐指数
1
解决办法
1158
查看次数

AWS CodeBuild 无法同步到 S3 存储桶 ListObject 拒绝权限

在 CodeBuild 中,我有 2 个项目。一个用于暂存站点,另一个用于生产站点。当我编译我的网站并通过临时项目运行它时,它工作得很好。它已成功同步到我的暂存站点的 s3 存储桶。但是,当尝试编译它并通过生产项目运行它时,运行同步命令时,它会返回错误:

致命错误:调用 ListObjects 操作时发生错误 (AccessDenied):访问被拒绝

[容器] 2018/09/11 08:40:33 命令未成功退出 aws s3sync public/ s3://$S3_BUCKET 退出状态 1

我做了一些挖掘,我认为问题出在我的存储桶策略上。我使用 CloudFront 作为 S3 存储桶之上的 CDN。我不想修改生产存储桶的存储桶策略,除非我完全确定必须这样做。我担心这可能会对现场产生一些影响。这是我的生产存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[bucket_name]/*"
        },
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity [access_code]"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[bucket_name]/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services amazon-cloudfront aws-codebuild

0
推荐指数
1
解决办法
3348
查看次数

YAML_FILE_ERROR:未找到预期的密钥

我尝试使用 aws codeBuild 运行 Buildspec 并尝试使用 jq 命令即时生成 process.json 文件。但它在执行时出错并且构建失败。

build: 
              commands:
                - cp $CODEBUILD_SRC_DIR/qe/performance/* apache-jmeter-5.2/bin/
                - cd apache-jmeter-5.2/bin/
                - DATE=`date "+%Y%m%d-%H-%M-%S"`
                - aws s3 cp $DATE-Report s3://$JMeterScanResultBucket/${ProjectName}/$DATE --recursive
                - jq -n --arg appname "$appname" '{apps: [ {project: wsg, issuetype: "Test Execution", summary: "Test Execution for junit Execution"}]}' > process.json
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:第 20 行转到上面的“jq”命令

DOWNLOAD_SOURCE 
Failed
YAML_FILE_ERROR: did not find expected key at line 20
Run Code Online (Sandbox Code Playgroud)

json yaml pyyaml aws-codebuild

0
推荐指数
1
解决办法
7633
查看次数

如何在 CodeBuild 中使用短提交 SHA 标记图像

当主分支中的新提交触发时,我试图从 CodeBuild 构建中获取提交的短 git SHA。

我知道其中CODEBUILD_RESOLVED_SOURCE_VERSION包含完整的提交 SHA。我想在将输出图像推送到 ECR 之前缩小该值以标记输出图像。

我尝试过buildspec.yml

version: 0.2

phases:
  pre_build:
    commands:
      ...
      - COMMIT_ID=${CODEBUILD_RESOLVED_SOURCE_VERSION:0:8}
      ...
  build:
    commands:
      ...
      - echo Tagging image with commit id $COMMIT_ID
      - docker tag $REPOSITORY_URI/$IMAGE_REPO_NAME:latest $REPOSITORY_URI/$IMAGE_REPO_NAME:$COMMIT_ID
      ...
  post_build:
    commands:
      ...
      - docker push $REPOSITORY_URI/$IMAGE_REPO_NAME:$COMMIT_ID
Run Code Online (Sandbox Code Playgroud)

但我得到:

[Container] 2022/07/07 11:30:05 Running command COMMIT_ID=${CODEBUILD_RESOLVED_SOURCE_VERSION:0:8}
/codebuild/output/tmp/script.sh: 4: Bad substitution
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

git sh amazon-ecr aws-codebuild

0
推荐指数
1
解决办法
1305
查看次数