我的 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 文档在如何使用那里的正则表达式方面并不是很具体。
我已经为此苦苦挣扎了几个小时。因此,我创建了我的 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,所以上面的错误消息对我没有任何意义。
谢谢!
我部署的最后一个 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) 我的 buildspec.yml 文件中有一个 AWS CodeBuild 模板,构建部分包含以下行:
- if [ "${STAGE}" = "alpha" ]; then echo "Quitting alpha build." && exit 0; fi
Run Code Online (Sandbox Code Playgroud)
我的期望是,如果 $STAGE 变量设置alpha为成功完成,则构建应该退出构建。但是,它会转到下一行。
如果我将退出代码更改为1,则构建将按预期失败。
有什么想法如何像这样提前结束构建,这条线有明显的错误吗?
当我在 Amplify 中运行 CodeBuild 时,我的 AppSync 凭据被覆盖,从而破坏了构建。
我正在使用 AWS Amplify 作为后端构建一个 ReactJS 网站。该项目正在使用 Amplify 内置 CodeBuild 进行部署。AppSync API 是为 Amplify 单独创建的,不会直接出现在 Amplify 控制台中。
当我运行时amplify codegen add --apiId xxx,aws-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
有没有办法root在AWS 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 身份运行它吗?
背景:
我正在使用 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 项目中定义的环境变量:
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 …
我有 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) aws-codebuild ×10
bash ×2
amazon-vpc ×1
aws-amplify ×1
aws-appsync ×1
aws-cdk ×1
bitbake ×1
nat ×1
reactjs ×1
subnet ×1
terraform ×1
yocto ×1