一个简单的构建规范,例如:
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 中建模的?或者说这是不可能的?
刚刚开始探索 AWS CodeBuild。如果未设置强制自定义环境变量(例如 TARGET_ENVIRONMENT),如何在安装或 pre_build 阶段强制构建失败?
我目前正在使用 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) 我的 github 存储库中有一些符号链接。
当我有一个直接从 github 克隆的 Codebuild 项目时,符号链接会被保留。
我进行了切换,以便 Codepipeline 侦听devgithub 分支中的更改,并将工件传递给 codebuild。
自从进行此切换后,Codebuild 就再也看不到符号链接了。
这是设计使然,还是我在配置代码管道时可能遗漏了某些内容?
我能够在构建规范中检索秘密(给定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
为什么 buildspec 文件支持多个构建阶段?install, pre_build, build, post_build? 如果我将所有构建步骤都放在一个阶段,我是否做错了什么?除了保持某种结构之外,有什么非常有用的东西吗?
我在参数存储中跟踪一个数字,并在 CodeBuild 执行期间访问它。CodeBuild 环境是一台 Windows 机器。我想打印环境变量。
我尝试了以下方法:
echo $NUMBER$TMP=$NUMBER; echo $TMPAdd-Content -Path number.txt -Value $NUMBER; Get-Content number.txt所有这些都将打印为星号。看起来 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) 一直在尝试按照此处的教程设置 AWS 管道:https : //docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html
以下是一些我已经尝试过的操作:
下面是我的 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
我想使用 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)