标签: aws-codebuild

CodePipeline 构建规范和多个构建操作

一个简单的构建规范,例如:

version: 0.2

phases:
  install:
    commands:
      - (cd lambda/src; npm install)
      - aws cloudformation package --template-file lambda/sam.yml --s3-bucket skynet-lambda --output-template-file SkynetLambdaPackaged.yml

artifacts:
  type: zip
  files:
    - SkynetLambdaPackaged.yml
Run Code Online (Sandbox Code Playgroud)

当我在构建阶段执行一项操作时,效果很好。但是,如果我想要更多构建操作,例如:我想并行构建我的 api 服务器和前端文件。我该如何建模?

更新

在 CodePipeline 中,我可以创建并行运行的操作,如下所示,这是如何在 buildspec 中建模的?或者说这是不可能的?

在此输入图像描述

amazon-web-services aws-codepipeline aws-codebuild

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

如何强制使 CodeBuild (AWS) 失败?

刚刚开始探索 AWS CodeBuild。如果未设置强制自定义环境变量(例如 TARGET_ENVIRONMENT),如何在安装或 pre_build 阶段强制构建失败?

amazon-web-services aws-codebuild

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

AWS CodePipeline 不尊重 CodeBuild 设置

我目前正在使用 codepipeline、codebuild、codedeploy 和 codecommit 创建管道。当我将 codebuild 构建工件上传到 s3 时遇到问题,因为它不遵循我在 buildspec.yml 中设置的工件名称:

artifacts:
  files:
    - '**/build/*'
  name: build-$(date +%Y-%m-%d) 
Run Code Online (Sandbox Code Playgroud)

相反,它会随机创建一个构建名称。在我的 codebuild 设置中,我已经启用了语义版本控制,但它似乎被 codepipeline 忽略了,因为我可以在日志中看到,如果我运行 codepipeline 或仅运行 codebuild,则生成构建工件时存在差异。

这是仅在代码构建的日志中显示的内容:

[Container] 2019/08/08 09:28:07 Assembling file list 
[Container] 2019/08/08 09:28:07 Expanding **/build/* 
[Container] 2019/08/08 09:28:08 Found 144 file(s) 
[Container] 2019/08/08 09:28:08 Updating artifact name as  build-2019-08-08 
Run Code Online (Sandbox Code Playgroud)

这是 codepipeline 日志中显示的内容:

[Container] 2019/08/08 09:19:50 Assembling file list 
[Container] 2019/08/08 09:19:50 Expanding **/build/* 
[Container] 2019/08/08 09:19:50 Found 144 file(s) 
[Container] 2019/08/08 09:19:50 Phase complete: UPLOAD_ARTIFACTS State: SUCCEEDED …
Run Code Online (Sandbox Code Playgroud)

aws-codepipeline aws-codebuild

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

AWS Codepipeline 是否会将符号链接传递到工件中的 Codebuild

我的 github 存储库中有一些符号链接。

当我有一个直接从 github 克隆的 Codebuild 项目时,符号链接会被保留。

我进行了切换,以便 Codepipeline 侦听devgithub 分支中的更改,并将工件传递给 codebuild。

自从进行此切换后,Codebuild 就再也看不到符号链接了。

这是设计使然,还是我在配置代码管道时可能遗漏了某些内容?

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

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

您如何引用 aws 机密管理器机密“值”,并将其应用于代码构建 buildspec 命令?

我能够在构建规范中检索秘密(给定https://aws.amazon.com/about-aws/whats-new/2019/11/aws-codebuild-adds-support-for-aws-secrets-manager/ ):

secrets-manager:
secret_key_param: secret_name
Run Code Online (Sandbox Code Playgroud)

但是,这样做时,它会给出:

{"secret_key":"secret_value"}
Run Code Online (Sandbox Code Playgroud)

我只需要“ secret_value ”,在代码构建构建规范中是否有一种简单的方法可以做到这一点?

注意:我已经看到:如何将命令的输出分配给代码构建中的变量,它没有回答问题!它只是引用 cli 命令来检索值(作为整个 json 转储的一部分)

最终目标是能够:

phases:
  pre_build:
    commands:
      - echo Logging in to DockerHub...
      - docker login --username XXXX --password "secret_value"
Run Code Online (Sandbox Code Playgroud)

TIA

docker aws-codebuild aws-secrets-manager

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

为什么 AWS CodeBuild buildspec.yml 支持多个构建阶段?

为什么 buildspec 文件支持多个构建阶段?install, pre_build, build, post_build? 如果我将所有构建步骤都放在一个阶段,我是否做错了什么?除了保持某种结构之外,有什么非常有用的东西吗?

amazon-web-services aws-codepipeline aws-codebuild

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

AWS CodeBuild 无法打印参数存储环境变量

我在参数存储中跟踪一个数字,并在 CodeBuild 执行期间访问它。CodeBuild 环境是一台 Windows 机器。我想打印环境变量。

我尝试了以下方法:

  1. 按原样打印环境变量: echo $NUMBER
  2. 将环境变量分配给另一个变量并打印: $TMP=$NUMBER; echo $TMP
  3. 将环境变量回显到文本文件并打印该文本文件: Add-Content -Path number.txt -Value $NUMBER; Get-Content number.txt

所有这些都将打印为星号。看起来 CodeBuild 会自动尝试审查它认为敏感的环境变量(也许所有参数存储变量?我找不到任何关于此的文档)。这个特定的环境变量不敏感,我们想打印它。有没有可能的方法?

continuous-integration amazon-web-services aws-codebuild

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

CodeBuild 不报告失败的测试

我正在使用 CodeBuild 构建我的 NPM 项目。我的构建规范中有一个特定的报告组,我正在使用 Jest 和npm test命令运行单元测试。

当所有测试通过后,成功上报到 CodeBuild 报告组。但是,如果其中一项测试失败,我会收到错误消息:

[Container] 2020/08/24 01:41:18 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: npm test -- --silent. Reason: exit status 1`
Run Code Online (Sandbox Code Playgroud)

并且构建停止(通常很好)但未报告失败的测试,因此测试通过率保持在 100%,这意味着我看不到测试趋势或其他详细信息。

我的 buildspec.yml 的相关部分:

version: 0.2
phases:
  install:
    commands:  
      - npm install
  pre_build:
    commands:
      - npm test -- --silent    
reports:
  jest_reports:
    files:
      - 'test-results.xml'
    file-format: JunitXml
    base-directory: "reports/results"
Run Code Online (Sandbox Code Playgroud)

我的 package.json 中的 Jest 配置:

"jest": {
    "reporters": [
        "default",
        [
            "jest-junit",
            {
                "outputDirectory": "reports/results",
                "outputName": "test-results.xml" …
Run Code Online (Sandbox Code Playgroud)

unit-testing amazon-web-services jestjs aws-codebuild

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

无法执行 AWS Pipeline 错误:“调用 PutObject 操作时发生错误 (AccessDenied):拒绝访问”

一直在尝试按照此处的教程设置 AWS 管道:https : //docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html

但是管道不断失败并显示以下错误日志: 在此处输入图片说明

以下是一些我已经尝试过的操作:

  1. 授予 S3 对与 Cloud Formation 和代码管道服务角色关联的“cfn-lambda-pipeline”角色的完全访问权限。

在此处输入图片说明

在此处输入图片说明

  1. 允许公共 ACL 访问 S3 存储桶。

在此处输入图片说明

下面是我的 buildspec.yml

version: 0.2
phases:
  install:
    runtime-versions:
        nodejs: 12
  build:
    commands:
      - npm install
      - export BUCKET=xx-test
      - aws cloudformation package --template-file template.yaml --s3-bucket $BUCKET --output-template-file outputtemplate.yml
artifacts:
  type: zip
  files:
    - template.yml
    - outputtemplate.yml
Run Code Online (Sandbox Code Playgroud)

下面是我的 template.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  helloWorld
  DZ Bank API Gateway connectivity helloWorld
  
Globals:
  Function:
    Timeout: 3

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./ …
Run Code Online (Sandbox Code Playgroud)

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

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

使用 AWS CDK 创建用于构建 Docker 镜像的 CodeBuild 项目

我想使用 AWS CDK 在源代码中定义一个 CodeBuild 项目。CodeBuild 项目需要能够构建然后推送 docker 镜像。

在 AWS 控制台中创建新的 CodeBuild 项目时,有一个选项:

特权 如果您想构建 Docker 映像或希望您的构建获得提升的权限,请启用此标志。

在此处输入图片说明

我在API Docs 中没有看到用于打开Privileged标志的等效API

var codeBuildProject = new Project(this, "Example_Build", new ProjectProps
{
    ProjectName = "ExampleBuildFromCDK",
    // How to add Privileged?
    BuildSpec = BuildSpec.FromSourceFilename("example/buildspec.yml"),
    Source = Source.CodeCommit(new CodeCommitSourceProps
    {
        Repository = Repository.FromRepositoryArn(this, "CodeCommit", CodeRepositoryArn),
        BranchOrRef = "refs/heads/example/added-docker-images"
    })
});
Run Code Online (Sandbox Code Playgroud)

如果我尝试在不将Privileged设置为 true 的情况下运行我的构建,我将收到标准错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? …
Run Code Online (Sandbox Code Playgroud)

c# amazon-web-services aws-codebuild aws-cdk

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