首页/新闻资讯/正文详情

使用 AWS SDK for JavaScript (v3) 创建 AWS CodeBuild 构建项目:从示例到集成测试的实战指南

发布时间:2026/9/25 4:12:21 来源:云帆数科 栏目:资讯中心
使用 AWS SDK for JavaScript (v3) 创建 AWS CodeBuild 构建项目:从示例到集成测试的实战指南
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读本文围绕 javascriptv3/example_code/codebuild 目录下的 CodeBuild 示例系统讲解如何基于 AWS SDK for JavaScript (v3) 调用CreateProjectCommand创建 CodeBuild 构建项目并完整覆盖运行方式、依赖配置与端到端集成测试。读完本文你将能够看懂并复用仓库中的create-project单动作示例、理解构建项目各配置字段产物、环境、源码、服务角色的真实含义并掌握用 Vitest 编写集成测试验证 CodeBuild 项目是否成功创建的方法。背景CodeBuild 示例在这个仓库中做什么在javascriptv3代码集中CodeBuild 属于单服务动作Single actions级别的示例即展示如何调用单个服务函数。正如 codebuild/README.md 概述所述CodeBuild compiles your source code, runs unit tests, and produces artifacts that are ready to deploy.CodeBuild 负责编译源代码、运行单元测试并产出可部署的构建工件artifacts。该目录下的示例聚焦于CreateProject创建构建项目这一动作对应源码 actions/create-project.js。整个目录结构非常精简javascriptv3/example_code/codebuild/ ├── actions/ │ └── create-project.js # 单动作示例创建 CodeBuild 项目 ├── tests/ │ └── create-project.integration.test.js # Vitest 集成测试 ├── client.js # CodeBuildClient 客户端初始化 ├── package.json # 依赖与测试脚本 └── README.md # 示例说明文档前置条件与准备运行本示例前需要满足以下前置条件与 javascriptv3/README.md 一致安装 Node.js安装最新稳定版本。配置 AWS 凭证设置共享配置文件~/.aws/credentials存放凭证SDK for JavaScript (v3) 会自动加载。安装依赖在javascriptv3目录下执行npm i。此外需要留意官方文档中的几条重要提醒见 codebuild/README.md运行这些代码和测试可能产生 AWS 账户费用建议遵循最小权限原则least privilege只授予完成任务所需的最低权限该代码并未在全部 AWS 区域经过测试。核心实战CreateProject 单动作详解创建客户端区域如何解析所有 CodeBuild 操作都依赖CodeBuildClient仓库在 client.js 中演示了最简洁的初始化方式import { CodeBuildClient } from aws-sdk/client-codebuild; // 未显式指定 region 时SDK 会依次尝试环境变量或 AWS 配置文件来确定区域。 const client new CodeBuildClient({}); export { client };从 create-project.js 的源码看示例内部也直接通过new CodeBuildClient({})实例化客户端——即在本地开发时区域由AWS_REGION/AWS_DEFAULT_REGION环境变量或~/.aws/config中的配置决定。完整参数解析CreateProjectCommand核心代码位于 actions/create-project.js它从aws-sdk/client-codebuild导入枚举与命令并封装为createProject函数import { ArtifactsType, CodeBuildClient, ComputeType, CreateProjectCommand, EnvironmentType, SourceType, } from aws-sdk/client-codebuild; export const createProject async ( projectName MyCodeBuilder, roleArn arn:aws:iam::xxxxxxxxxxxx:role/CodeBuildAdmin, buildOutputBucket xxxx, githubUrl https://..., ) { const codeBuildClient new CodeBuildClient({}); const response await codeBuildClient.send( new CreateProjectCommand({ artifacts: { // 构建产物的输出位置。 type: ArtifactsType.S3, location: buildOutputBucket, }, environment: { // computeType 与 type 的组合决定环境的 CPU、内存、磁盘要求。 computeType: ComputeType.BUILD_GENERAL1_SMALL, // Docker 镜像标识符。 image: aws/codebuild/standard:7.0, type: EnvironmentType.LINUX_CONTAINER, }, name: projectName, // 具有创建项目、写入产物位置和写入 CloudWatch 日志权限的 IAM 角色 ARN。 serviceRole: roleArn, source: { type: SourceType.GITHUB, location: githubUrl, }, }), ); console.log(response); return response; };各配置字段的实际作用如下字段取值示例中的值说明nameMyCodeBuilder默认CodeBuild 项目名称在账户与区域范围内唯一serviceRoleIAM 角色 ARN项目运行时扮演的服务角色需具备创建项目、写入 S3 产物桶、写入 CloudWatch 日志的权限artifacts.typeArtifactsType.S3构建产物类型示例将产物输出到 S3artifacts.locationS3 桶名产物输出桶environment.computeTypeComputeType.BUILD_GENERAL1_SMALL计算类型决定构建环境的 CPU/内存/磁盘规格environment.imageaws/codebuild/standard:7.0构建环境使用的托管 Docker 镜像environment.typeEnvironmentType.LINUX_CONTAINER构建环境类型Linux 容器source.typeSourceType.GITHUB源码仓库类型示例使用 GitHubsource.locationGitHub 仓库 URL待构建源码仓库地址其中computeType与type的组合直接决定了构建环境的硬件规格CPU、内存、磁盘空间是影响构建速度与费用的关键参数image则决定构建环境预装哪些工具链。示例选用的aws/codebuild/standard:7.0是 AWS 提供的标准托管镜像。响应结构创建成功后返回什么源码 create-project.js 中注释了一段完整响应示例展示了成功创建后返回的project对象关键字段{ $metadata: { httpStatusCode: 200, requestId: b428b244-777b-49a6-a48d-5dffedced8e7, attempts: 1 }, project: { arn: arn:aws:codebuild:us-east-1:xxxxxxxxxxxx:project/MyCodeBuilder, artifacts: { encryptionDisabled: false, location: xxxxxx-xxxxxxx-xxxxxx, name: MyCodeBuilder, namespaceType: NONE, packaging: NONE, type: S3 }, badge: { badgeEnabled: false }, cache: { type: NO_CACHE }, created: 2023-08-18T14:46:48.979Z, encryptionKey: arn:aws:kms:us-east-1:xxxxxxxxxxxx:alias/aws/s3, environment: { computeType: BUILD_GENERAL1_SMALL, environmentVariables: [], image: aws/codebuild/standard:7.0, imagePullCredentialsType: CODEBUILD, privilegedMode: false, type: LINUX_CONTAINER }, lastModified: 2023-08-18T14:46:48.979Z, name: MyCodeBuilder, projectVisibility: PRIVATE, queuedTimeoutInMinutes: 480, serviceRole: arn:aws:iam::xxxxxxxxxxxx:role/CodeBuildAdmin, source: { insecureSsl: false, location: https://..., reportBuildStatus: false, type: GITHUB }, timeoutInMinutes: 60 } }其中timeoutInMinutes默认 60、queuedTimeoutInMinutes默认 480等字段是 AWS 为项目设置的默认值encryptionKey默认指向 KMS 的alias/aws/s3表示产物默认使用 S3 托管密钥加密。如何运行示例直接运行单动作根据 codebuild/README.md 的说明所有示例均采用ECMAScript 6 (ES6)编写package.json中type: module也印证了这一点。运行单动作使用node ./actions/create-project.jscreate-project.js 底部有一段直接运行守卫逻辑if (process.argv[1] fileURLToPath(import.meta.url)) { createProject(); }也就是说该文件既可作为独立脚本直接执行此时使用默认参数MyCodeBuilder、占位 ARN 等也可作为模块被其他代码import { createProject }后按需调用——集成测试正是采用后一种方式。运行场景与带选项运行README 同时给出了场景类示例的通用运行方式node ./scenarios/fileName以及带命令行选项的运行方式node ./scenarios/fileName --option1 --option2这些选项通过 Node.js 内置的util.parseArgs配置每个脚本具体支持哪些选项需查看对应文件的parseArgs用法。就当前 CodeBuild 目录而言它属于单动作示例而非场景因此仓库中不包含scenarios/目录。集成测试端到端验证创建流程CodeBuild 示例附带 Vitest 集成测试 tests/create-project.integration.test.js它完整演示了创建前置资源 → 创建项目 → 验证 → 清理的全流程并印证了createProject的真实调用方式。测试所需的资源测试开始前beforeAll会准备三类资源均在测试完成后afterAll清理IAM 角色以CodeBuildAdmin-随机后缀命名创建信任主体为codebuild.amazonaws.com服务允许其执行sts:AssumeRoleS3 桶以codebuild-bucket-随机后缀命名用作产物输出桶CodeBuild 项目以codebuild-project-随机后缀命名。角色与权限的最小集合测试中为角色附加了两个 AWS 托管策略测试源码 L42-L50CloudWatchLogsFullAccess——构建日志写入 CloudWatch Logs 所需AWSCodeBuildAdminAccess——管理 CodeBuild 项目所需。这与createProject中serviceRole的注释要求完全对应该角色必须具有创建 CodeBuild 项目、写入产物位置和写入 CloudWatch 日志的权限。重试机制与异步一致性验证调用createProject时测试通过aws-doc-sdk-examples/lib提供的retry工具进行重试间隔 1000ms、最多 20 次await retry({ intervalInMs: 1000, maxRetries: 20 }, async () { await createProject( projectName, roleArn, bucketName, https://github.com/awsdocs/aws-doc-sdk-examples.git, ); });retry的实现位于 javascriptv3/example_code/libs/utils/util-timers.js它会在函数抛错时按intervalInMs间隔反复重试直至成功、耗尽maxRetries或配置swallowError时吞掉错误。这里用重试是为了容忍 IAM 角色等资源刚创建后的最终一致性延迟。用分页器断言创建结果创建后测试使用 CodeBuild 客户端的分页器paginateListProjects遍历项目列表断言刚创建的项目名出现在其中const listProjectsPaginator paginateListProjects({ client: codebuildClient }, {}); for await (const page of listProjectsPaginator) { projectNames.push(...page.projects); } expect(projectNames).toContain(projectName);测试后的资源清理afterAll中按依赖顺序逆序清理先DetachRolePolicyCommand解除两个策略再DeleteRoleCommand删除角色、DeleteBucketCommand删除 S3 桶、DeleteProjectCommand删除 CodeBuild 项目避免遗留云资源产生持续费用。依赖与测试脚本配置package.json 展示了该示例的依赖构成运行时依赖aws-sdk/client-codebuild^3.391.0与aws-doc-sdk-examples/lib^1.0.0提供retry/wait等工具开发依赖aws-sdk/client-iam、aws-sdk/client-s3测试中准备 IAM 角色与 S3 桶以及vitest^1.6.0测试脚本npm run integration-test会以 JUnit 报告格式运行集成测试并输出到test_results/codebuild-test-results.junit.xml。更通用的测试入口见 javascriptv3/README.md单测用npm test集成测试用npm run integration-test输出分别写入unit_test.log与integration_test.log。注意集成测试同样可能产生 AWS 账户费用。延伸阅读继续深入可以从仓库中获取以下资料javascriptv3/README.mdJavaScript (v3) 示例集的全局说明含前置条件、测试与代码规范actions/create-project.js本文核心示例的完整源码tests/create-project.integration.test.js端到端集成测试实现client.js客户端初始化范式官方层面可参考 AWS CodeBuild 用户指南、CodeBuild API Reference 以及 SDK for JavaScript (v3) 的 CodeBuild 客户端参考进一步了解CreateProjectCommand的更多可选参数如environmentVariables、cache、vpcConfig、logsConfig等在真实流水线中的配置方式。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐AWS CodeBuild 的 AWS SDK for GoV1实战示例构建项目、列出构建与项目AWS CodeBuild 的 AWS SDK for GoV1实战示例构建项目、列出构建与项目 导读 本文基于 AWS 文档代码示例仓库中的 go/co示例工程教程后端AWS SDK for C CodeBuild 代码示例构建列表、项目查询与构建启动实战AWS SDK for C CodeBuild 代码示例构建列表、项目查询与构建启动实战 导读 本指南围绕 AWS Code Examples 仓库中 c示例工程教程后端使用 AWS SDK for C 构建 Hello IAM 示例从 CMake 构建到 ListPolicies 实战使用 AWS SDK for C 构建 Hello IAM 示例从 CMake 构建到 ListPolicies 实战 导读 本文基于 AWS 官方代码示示例工程教程后端上一篇MATLAB图像导出终极指南如何用export_fig解决科研论文图像质量难题下一篇3步解锁Switch控制器JoyCon-Driver让你在Windows上免费畅玩PC游戏创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

AI落地真相:六成项目使用率不足,幻觉、部署与Agent三大坑
AI落地真相:六成项目使用率不足,幻觉、部署与Agent三大坑

上周末和一个做AI落地交付的朋友通了将近两个小时的语音。他这三年从大厂出来自己接项目,经手的行业覆盖金融、制造、客服,全是正经的企业级合同。电话挂掉之后我在书桌前坐了很久,脑子里只有一个念头反复打转:他说的每一句话&… · 2026/9/25 4:12:15

中文谣言检测毕设完整代码包:从数据预处理到模型部署的七步流水线
中文谣言检测毕设完整代码包:从数据预处理到模型部署的七步流水线

简介:这份本科毕业设计论文资源聚焦中文谣言检测,面向自然语言处理方向的学生与研究者,帮助理解如何用机器学习与深度学习构建谣言识别系统。压缩包共26个文件,约4.93MB,包含12个Python脚本、9个文本文件、4个JSON数据… · 2026/9/25 4:12:15

AI辅助论文写作全指南:8款工具分工实测与查重率真相
AI辅助论文写作全指南:8款工具分工实测与查重率真相

前阵子有个师弟半夜发消息问我:"师兄,网上那些AI写论文神器靠谱吗?查重率低、原创度高,真有这么神?"我反问他:你打算让AI帮你干什么?他回了一句"帮我把摘要和文献综述写了&#… · 2026/9/25 4:12:15

机械仪表与自动化会议论文投稿指南:EI/Scopus检索与见刊策略
机械仪表与自动化会议论文投稿指南:EI/Scopus检索与见刊策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:54:27

TRON钱包选型指南:TronLink、Ledger、Bitget钱包深度对比
TRON钱包选型指南:TronLink、Ledger、Bitget钱包深度对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:54:27

拯救者Y9000P软件卡顿根因与精准治理方案
拯救者Y9000P软件卡顿根因与精准治理方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:54:27

如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南
如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南

如何用 Ruffle 浏览器扩展在浏览器里重新播放 Flash:新手入门指南 【免费下载链接】ruffle A Flash Player emulator written in Rust 项目地址: https://gitcode.com/GitHub_Trending/ru/ruffle 打开老页面只剩一块灰底,还提示“需要安装 Flash”… · 2026/9/25 4:54:27

TypeDoc @include 与 @includeCode 标签实战指南:在文档注释中嵌入外部文件、代码区域与行号片段
TypeDoc @include 与 @includeCode 标签实战指南:在文档注释中嵌入外部文件、代码区域与行号片段

开发工具文档 【免费下载链接】typedoc Documentation generator for TypeScript projects. 项目地址: https://gitcode.com/gh_mirrors/ty/typedoc 点击查看 免费下载 TypeDoc 的 {include} 标签族允许你在 TSDoc 文档注释或外部 Markdown 文档中直接嵌入仓库里的… · 2026/9/25 4:54:27

TypeScript 7 修复 union/intersection 合成属性的 setter 可访问性检查:读写权限分离解析
TypeScript 7 修复 union/intersection 合成属性的 setter 可访问性检查:读写权限分离解析

文档教程 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source. 项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book 点击查看 免费下载 本文基于 typescri… · 2026/9/25 4:54:20

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码