问题标签 [aws-codebuild]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2105 浏览

amazon-web-services - AWS 代码构建 - 报告未在 S3 存储桶中生成

我正在尝试在 aws 中创建一个代码构建项目。我已经成功配置了代码构建项目并且代码也在构建中,但是没有在指定的 S3 存储桶中创建测试报告,我已经在 buildspec.yml 中指定了人工制品,但仍然没有生成报告。下面是我的buildspec.yml文件。

我还在 S3 Bucket 上指定了适当的权限来上传/创建文件。以下是成功构建后我得到的构建日志 -

我在对齐和稍微改变后再次尝试buildspec.yml如下 -

但它仍然无法在 s3 文件夹中生成人工制品。

0 投票
1 回答
1892 浏览

android - 在 AWS codebuild 中为 Android 构建设置环境

我正在尝试在 AWS 服务器中安装 Android 环境。这是 buildspec.yml 文件,其中包含一组用于安装 Android SDK、NDK 和gradlew以生成 android build 的命令。适用于 Android 的 SDK 和 NDK 已成功下载并安装在 AWS Ubuntu 系统上。甚至我可以看到成功构建的./gradlew build的日志。

构建规范.yml

当我尝试为 Android 构建执行./gradlew assemble命令时,它可以在 Android Studio 的 Android 输出目录中生成应用程序文件 (.apk),但不幸的是它在 AWS CodeBuild 环境中不起作用。

有人对这个问题有深入的了解吗?如果您在设置部分发现任何错误,请提出建议。

我已按照 AWS CodeBuild 的本教程进行操作。

0 投票
2 回答
15813 浏览

amazon-web-services - 有没有办法在 AWS codebuild 上更改目录

随着 Snap-CI 的消失,我一直在尝试让我们的构建在 AWS CodeBuild 上运行。我已经构建了 buildspec.yml,但更改目录似乎不起作用。

看起来这应该相当简单,但到目前为止我还没有任何运气让它工作。

0 投票
1 回答
152 浏览

amazon-web-services - AWS 中 Docker 的简单持续交付过程

我正在使用 AWS Code Pipeline、Code Build 创建一个新的 Docker 容器并将其推送到 ECR。

我的应用程序是一个简单直接的基于单个容器的应用程序。有什么方法可以减少当前运行的容器并从 ECS 注册表中重新启动一个新容器(通过代码管道生成代码的输出)。

我尝试了使用 EC2 用户数据的 CloudFormation,一侧是自定义脚本,另一侧是使用 ECS 和任务定义的 CloudFormation(尚未成功)。我强烈认为必须有更明显和更简单的方法。

0 投票
2 回答
1659 浏览

maven - 在 CodeBuild maven 作业上使用适当的 ECS 凭证

我正在尝试在我的 mvn 命令中使用 CodeBuild 服务角色,但它似乎没有获得适当的 IAM 权限。我正在使用s3-wagon-private 插件,它似乎使用了最新版本的DefaultAWSCredentialsProviderChaininclude EC2ContainerCredentialsProviderWrapper,所以我认为它应该使用 CodeBuild 容器上的 CodeBuild 角色。该角色对我尝试使用 s3-wagon-private 访问的 S3 存储库具有适当的权限。

但似乎如果不使用 Clojure 项目和 project.cloj,则默认情况下不会使用DefaultAWSCredentialsProviderChain。我已经查看了Spring AWS MavenMaven S3 Wagon,但两者都使用了DefaultAWSCredentialsProviderChain添加 ECS 凭证(AWS SDK ~1.11.14)之前的版本,并且没有看到太多更新,所以我们不能过于自信获取更新/测试/发布的 SDK 版本。

有谁知道将 S3 用作最新版本的 maven repo 的简单方法DefaultCredentialProviderChain

0 投票
2 回答
1884 浏览

amazon-web-services - AWS CodeBuild - 在构建期间无法找到 DockerFile

开始使用 AWS CodeBuild。

目标是让 docker 图像作为最终结果,其中运行 nodejs、hapi 和示例应用程序。

目前我有一个问题:“无法准备上下文:无法评估 Dockerfile 路径中的符号链接:lstat /tmp/src049302811/src/Dockerfile:没有这样的文件或目录”出现在 BUILD 阶段。

项目详情:

  1. 用作源的 S3 存储桶
  2. 存储在相应 S3 存储桶中的 ZIP 文件包含 buildspec.yml、package.json、示例 *.js 文件和 DockerFile。
  3. aws/codebuild/docker:1.12.1 用作构建环境。

当我使用安装在笔记本电脑上的 Docker 构建映像时,没有任何问题,所以我无法理解需要指定哪个目录才能消除此错误消息。

Buildspec 和 DockerFile 附在下面。

感谢您的任何评论。

0 投票
5 回答
7612 浏览

amazon-web-services - AWS CodeBuild GetAuthorizationToken 失败

我正在尝试构建我的测试项目,但每次它都在pre_build中失败。我检查了错误日志,它说:

[容器] 2017/03/26 19:28:21 调用 GetAuthorizationToken 操作时发生错误(AccessDeniedException):用户:arn:aws:sts::074181202020:assumed-role/codebuild-Testing-project-service-role/ AWSCodeBuild 无权执行:ecr:GetAuthorizationToken on resource:*

我已尝试附加以下政策:

  • IAMSelfManageServiceSpecificCredentials
  • IAM完全访问
  • AmazonS3ReadOnlyAccess
  • CodeBuildPolicy-Testing-project-1490555003058
  • IAM只读访问
  • AWSCodeBuildAdminAccess
  • IAM用户SSH密钥
  • AWSCodeCommitFullAccess
  • IAM完全访问
  • AmazonS3FullAccess
  • 管理员访问
  • AWSElasticBeanstalkFullAccess
  • AWSCodePipelineFullAccess
  • WSCodeBuildAdminAccess

但它仍然给我同样的错误

任何帮助,将不胜感激!谢谢!

0 投票
2 回答
2218 浏览

credentials - 在 AWS CodePipeline 中处理运行时间和构建时间密钥

我们正在处理为使用 AWS CodePipeline 构建并部署到 ECS 的应用程序提供构建时间和运行时间机密的问题。

最终,我们的愿景是为我们的每个应用程序创建一个通用管道,以实现以下目标:

  • 访问完全分离
    • app-a-pipeline 中的服务无法访问任何凭据或使用 app-b-pipeline 中使用的任何密钥,反之亦然
  • 指定开发人员的秘密管理
    • 只有负责 app-a 的开发人员才能读取和写入 app-a 的机密

以下是手头的问题:

  • 我们的一些应用程序需要在构建时访问私有存储库以解决依赖关系例如,我们的 java 应用程序需要访问私有 maven 存储库才能成功构建
  • 我们的一些应用程序在运行时需要数据库访问凭据 例如,运行我们应用程序的 servlet 容器需要一个包含凭据的 .xml 配置文件来查找和访问数据库

除了一些警告:

  • 我们的代码库位于公共存储库中。我们不想通过将秘密的明文或密文放在我们的存储库中来暴露秘密
  • 即使 ECR 访问受到限制,我们也不希望将运行时机密烘焙到在 CodeBuild 中创建的 Docker 映像中
  • ECS 资源的 Cloudformation 模板及其关联的参数文件以明文形式驻留在公共存储库中。这消除了通过参数将运行时机密传递给 ECS Cloudformation 模板的可能性(据我了解)

我们已经考虑使用credstash等工具来帮助管理凭据。此解决方案要求 CodeBuild 和 ECS 任务实例都能够使用 AWS CLI。为了避免更换更多凭证,我们决定最好将特权角色分配给需要使用 AWS CLI 的实例。这样,CLI 可以从实例元数据中的角色推断凭据

鉴于这些限制,我们试图设计一种方法来管理我们的秘密。对于每个应用程序,我们创建一个管道。使用 Cloudformation 模板,我们创建:

  • 4 资源:

    • DynamoDB 凭证表
    • KMS 凭证密钥
    • ECR 回购
    • CodePipeline(构建、部署等)
  • 3个角色:

    • CodeBuildRole 对 DynamoDB 凭证表的读取权限 使用 KMS 密钥解密权限 写入 ECR 存储库
    • ECSTaskRole 对 DynamoDB 凭证表的读取权限 使用 KMS 密钥解密权限 从 ECR 存储库读取
    • DeveloperRole 对 DynamoDB 凭证表的读写权限 使用 KMS 密钥加密和解密权限

CodePipeline 的 CodeBuild 步骤假定 CodeBuildRole 允许它从凭证表中读取构建时间机密。CodeBuild 然后构建项目并生成一个 Docker 映像,并将其推送到 ECR。最终,部署步骤使用 Cloudformation 模板和项目公共存储库中存在的随附参数文件创建 ECS 服务 ECS 任务定义包括假设 ECSTaskRole 以允许任务从凭证表中读取运行时机密并提取所需的图像来自 ECR。

这是 AWS 资源及其关系的简单图表,如上所述

我们目前提出的解决方案存在以下问题:

  • 角色重
    • 在我们的组织中,创建角色是一项特权行动。并非所有尝试创建上述管道的开发人员都有权创建必要的角色
  • 手动假设 DeveloperRole:
    • 就目前而言,开发人员需要手动承担 DeveloperRole。我们玩弄了将开发人员用户 ARN 列表作为参数传递给管道 Cloudformation 模板的想法。Cloudformation 是否具有将角色或策略分配给指定用户的机制?

有没有更完善的方法可以在 CodePipeline 中传递我们可能忽略的秘密,或者这是我们能得到的最好的方法?

0 投票
1 回答
448 浏览

git - 如何避免在 CI 构建中重复克隆第 3 方 git 存储库

我已经开始使用 AWS CodeBuild 来构建存储在 AWS CodeCommit 中的项目。我们的项目依赖于几个第三方库,大部分是作为 Git 检索的,有些是作为 HTTP 检索的。我们的构建脚本克隆/下载和提取所需的库(与我们在开发系统上进行本地构建的方式相同)。我担心的是,如果我们每天进行多次提交,CodeBuild 会反复从第三方克隆/下载。这似乎很浪费,我不关心我们的成本/带宽,但是随着越来越多的人依赖这些第三方库,他们的带宽/成本会显着增加。我想避免这种情况。

  1. 这是一个问题,还是我太谨慎了?
  2. 我可以使用哪些方法来避免重复拉取第 3 方库?

我们目前没有使用 git 子模块,但我认为这不会改变任何事情。

我可以git clone --depth 1 --shallow-submodules用来减少 3rd 方存储库的负载。

我最好的解决方案是在每次构建结束时打包第 3 方库,将它们存储在 S3 上,然后获取下一个构建,提取它,然后执行 git pull 以检查更新。

一个更简洁但不那么优雅的解决方案是拥有一个单独的构建系统来更新这些库的本地副本以供我们的项目构建使用,这避免了我们的构建过程中对这些第 3 方包的任何污染的可能性。

有更简单的选择吗?

0 投票
0 回答
998 浏览

amazon-web-services - 在完成构建之前发现构建容器已死亡。构建容器因内存不足或 Docker 镜像丢失 glibc 而死机

我正在尝试在 AWS 中进行一些基本的 Python Selenium 测试。我的想法是让 CodeBuild 运行它们,然后部署......非常基本,对吧?

但是,我在使用 AWS 提供的图像时遇到了很多麻烦,例如aws/codebuild/python:2.7.12

所以我决定使用 Selenium 的好人制作的 docker 镜像:https ://github.com/SeleniumHQ/docker-selenium/tree/master/StandaloneFirefox

我在标题中遇到了这个问题,我很确定这不是因为 RAM 太少(我尝试了 3GB 和 7GB)。

我还尝试扩展 Selenium docker 文件以确保安装 glibc:

任何想法问题出在哪里?