标签: aws-codebuild

从 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
查看次数

CodeBuild 找不到目标 Internet 网关的 0.0.0.0/0 目标

我已经为此苦苦挣扎了几个小时。因此,我创建了我的 VPC 以及 4 个不同的子网。前三个连接到常规 Internet 网关。最后一个连接到 NAT 网关(以 0.0.0.0/0 作为目标)。我的 CodeBuild 项目设置为使用此 VPC 和最后一个子网。

当我在 CodeBuild 项目环境中单击“验证 VPC 设置”时,我收到以下警告:

“ID 为*的 VPC可能没有互联网连接。CodeBuild 找不到子网 ID 为 * 的目标互联网网关的 0.0.0.0/0 目的地。”

如果我尝试运行 CodeBuild 项目,它将超时,因为它无法访问 Internet 并且无法从 CodeCommit 下载源...

我在这里缺少什么?我的子网的路由表附加到 NAT 网关,目标是 0.0.0.0/0,所以上面的错误消息对我没有任何意义。

谢谢!

nat subnet amazon-web-services amazon-vpc aws-codebuild

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

AWS CDK 管道错误 - 未找到匹配“xxxxx”的堆栈

我部署的最后一个 CDK Pipeline 遇到了困难。
我已按照此处的步骤操作:https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html,总体体验非常痛苦。首先,我必须手动更新 S3 存储桶策略,以让管道从存储桶中读取/写入它,否则我会收到拒绝访问 403 错误。
该部分似乎已解决,但现在,在“UpdatePipeline”阶段,我收到以下错误消息:Error: No stack found matching 'PTPipelineStack'. Use "list" to print manifest,显然,堆栈存在于 CloudFormation 中,如果我cdk list从 CLI 运行命令,我确实会看到 PTPipelineStack。我已经破坏了管道并重新部署了几次“以防万一”,但并没有真正帮助。有什么建议可以帮助解决这个问题吗?

bin/file.ts:

#!/usr/bin/env node
import * as cdk from '@aws-cdk/core'
import 'source-map-support/register'
import { MyPipelineStack } from '../lib/build-pipeline'

const app = new cdk.App()
const pipelineStack = new MyPipelineStack(app, 'PTPipelineStack', {
  env: {
    account: 'xxxxxxxxxxxx',
    region: 'eu-west-1',
  },
})


app.synth()
Run Code Online (Sandbox Code Playgroud)

lib/build-pipeline.ts:

import * as codepipeline from '@aws-cdk/aws-codepipeline'
import * as …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-codepipeline aws-codebuild aws-cdk

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

过早退出 CodeBuild 并显示成功代码

我的 buildspec.yml 文件中有一个 AWS CodeBuild 模板,构建部分包含以下行:

- if [ "${STAGE}" = "alpha" ]; then echo "Quitting alpha build." && exit 0; fi
Run Code Online (Sandbox Code Playgroud)

我的期望是,如果 $STAGE 变量设置alpha为成功完成,则构建应该退出构建。但是,它会转到下一行。

如果我将退出代码更改为1,则构建将按预期失败。

有什么想法如何像这样提前结束构建,这条线有明显的错误吗?

bash amazon-web-services aws-codebuild

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

将现有 AppSync API 添加到 AWS Amplify

问题

当我在 Amplify 中运行 CodeBuild 时,我的 AppSync 凭据被覆盖,从而破坏了构建。

细节

我正在使用 AWS Amplify 作为后端构建一个 ReactJS 网站。该项目正在使用 Amplify 内置 CodeBuild 进行部署。AppSync API 是为 Amplify 单独创建的,不会直接出现在 Amplify 控制台中。

当我运行时amplify codegen add --apiId xxxaws-exports.js会生成文件,其中包含以下字段:

const awsmobile = {
    "aws_project_region": "eu-west-2",
    "aws_appsync_graphqlEndpoint": "https://xxxxx.appsync-api.eu-west-2.amazonaws.com/graphql",
    "aws_appsync_region": "eu-west-2",
    "aws_appsync_authenticationType": "API_KEY",
    "aws_appsync_apiKey": "xxxxx"
};
Run Code Online (Sandbox Code Playgroud)

但是,当 Amplify Frontend CodeBuild 作业运行时,AppSync 字段不存在。amplifyPush --simple在后端作业期间运行会aws-exports.js使用以下内容覆盖该文件:

const awsmobile = {
    "aws_project_region": "eu-west-2"
};
Run Code Online (Sandbox Code Playgroud)

amplifyPush --simple这与该命令似乎生成的格式相同。这样做的结果是在构建过程中,React 找不到它需要的变量。

> react-scripts build
  [INFO]: Creating an optimized production build... …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services reactjs aws-codebuild aws-appsync aws-amplify

8
推荐指数
0
解决办法
1604
查看次数

作为非根用户的 AWS CodeBuild

有没有办法rootAWS CodeBuild上删除用户?我们正在构建一个 Yocto 项目,如果我们是 root(Bitbake 健全性检查),该项目在 CodeBuild 上失败。

我们绝望的方法也不起作用:

...

build:
  commands:
    - chmod -R 777 $(pwd)/ && chown -R builder $(pwd)/ && su -c "$(pwd)/make.sh" -s /bin/bash builder
...
Run Code Online (Sandbox Code Playgroud)

失败:

bash: /codebuild/output/src624711770/src/.../make.sh: Permission denied
Run Code Online (Sandbox Code Playgroud)

知道我们如何以非 root 身份运行它吗?

amazon-web-services bitbake yocto aws-codebuild

7
推荐指数
2
解决办法
4281
查看次数

AWS CodeBuild buildspec bash 语法错误:错误替换 if 语句

背景:

我正在使用 AWS CodeBuild buildspec.yml 迭代 GitHub 存储库中的目录。在循环目录路径之前$TF_ROOT_DIR,我使用 bash if 语句来检查 GitHub 分支名称是否$BRANCH_NAME在环境变量内$LIVE_BRANCHES。正如您在下面的错误屏幕截图中看到的,bash if 语句输出错误:syntax error: bad substitution。当我在本地 bash 脚本中重现 if 语句时,if 语句按预期工作。

以下是 CodeBuild 项目中定义的环境变量:

环境 以下是 buildspec.yml 中的相关片段:

version: 0.2
env:
  shell: bash
phases:
  build:
    commands:
      - |
        if [[ " ${LIVE_BRANCHES[*]} " == *"$BRANCH_NAME"* ]]; then
          # Iterate only through BRANCH_NAME directory
          TF_ROOT_DIR=${TF_ROOT_DIR}/*/${BRANCH_NAME}/
        else
          # Iterate through both dev and prod directories
          TF_ROOT_DIR=${TF_ROOT_DIR}/*/
        fi
      - echo $TF_ROOT_DIR
Run Code Online (Sandbox Code Playgroud)

这是显示语法错误的构建日志:

在此输入图像描述

以下是用于重现 CodeBuild …

bash amazon-web-services aws-codebuild

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

如何修复 AWS code-build apt-get update exit status 100 以便 React 应用程序上传到 s3

我有 ReactJs 应用程序并使用 AWS s3 部署静态站点。我已经为 CI/CD 设置了 AWS 代码构建。我正在使用 bitbucket,当任何 PR 合并到 master 分支 Web-hook 出现时,都会触发 React 应用程序构建并在 s3 上上传构建。

它在过去两年中运行良好,但在上次构建中我遇到了以下错误。

W:GPG 错误:https://dl.yarnpkg.com/debian stable InRelease:以下签名无效:EXPKEYSIG 23E7166788B63E1E Yarn Packaging yarn@dan.cx E:存储库“https://dl.yarnpkg.com/debian” stable InRelease' 未签名。

[容器] 2021/02/04 07:39:02 命令未成功退出 apt-get update exit status 100 [容器] 2021/02/04 07:39:02 阶段完成:安装状态:失败 [容器] 2021/ 02/04 07:39:02 阶段上下文状态代码:COMMAND_EXECUTION_ERROR 消息:执行命令时出错:apt-get update。原因:退出状态100

这是完整的日志输出。

在此输入图像描述

这是buildspec.yml文件

# aws codebuild for React and deployment to S3
version: 0.2
phases:
  install:
    runtime-versions:
      nodejs: 10
    commands:
      - echo Installing build …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-codebuild

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