
使用 AWS CLIcodebuild create-project创建 CodeBuild 构建项目参数详解与源码实现【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读aws codebuild create-project是 AWS CLI 中用于创建 AWS CodeBuild 构建项目Build Project的核心命令。本文以仓库中的官方示例文档 awscli/examples/codebuild/create-project.rst 为主体完整讲解两种创建方式命令行传参与 JSON 输入文件逐一剖析source、artifacts、environment、serviceRole等核心参数的结构、取值与默认行为并结合本仓库中 CodeBuild 服务模型awscli/botocore/data/codebuild/2016-10-06/service-2.json以及--cli-input-json、--generate-cli-skeleton两个全局参数的底层实现awscli/customizations/cliinputjson.py、awscli/customizations/generatecliskeleton.py进行源码级佐证。读完本文你将能独立创建、校验与排查 CodeBuild 构建项目并理解 AWS CLI 是如何将命令行参数组装成一次真实的 CodeBuild API 调用的。前置条件在运行create-project之前你需要确认以下条件已满足已安装并配置 AWS CLI本仓库即为 AWS CLI 的完整实现aws命令入口位于 awscli/main.py可通过aws configure或环境变量提供凭证。具备相应 IAM 权限调用CreateProject需要codebuild:CreateProject权限并需要一个 IAM 服务角色serviceRole该角色授权 CodeBuild 代表你的账户访问 S3、CloudWatch Logs、KMS 等依赖服务。准备输入源示例中使用 S3 桶中的源码压缩包因此需要预先将源码上传到 S3。核心参数结构CreateProject的输入结构定义在 awscli/botocore/data/codebuild/2016-10-06/service-2.json 的CreateProjectInputshape 中。从模型看必填参数有五个name、source、artifacts、environment、serviceRole。下面逐个展开。name项目名称构建项目的唯一名称。在服务模型CreateProjectInput中对应ProjectNameshape是必填项。项目创建后其 ARN 形如arn:aws:codebuild:region:account-id:project/name。source构建输入源source对应ProjectSourceshape必填字段为type。在服务模型中SourceType枚举值包括S3源码位于 S3 桶CODECOMMITAWS CodeCommit 仓库GITHUB/GITHUB_ENTERPRISEGitHub 或 GitHub EnterpriseGITLAB/GITLAB_SELF_MANAGEDGitLab 或自托管 GitLabBITBUCKETBitbucketCODEPIPELINE由 CodePipeline 提供源码NO_SOURCE无源码纯构建任务当type为S3时location的格式为bucket-name/object-key。示例中的codebuild-us-west-2-123456789012-input-bucket/my-source.zip即指向 S3 桶中的压缩包。ProjectSource还支持buildspec内联或指向 buildspec 文件的路径、gitCloneDepth、insecureSsl等可选字段insecureSsl用于在连接源码仓库时忽略 SSL 警告默认false输出响应中可见。artifacts构建输出产物artifacts对应ProjectArtifactsshape必填字段为type。ArtifactsType枚举值有S3产物上传到 S3 桶CODEPIPELINE产物由 CodePipeline 管理NO_ARTIFACTS不生成输出产物当type为S3时location只需给出桶名如codebuild-us-west-2-123456789012-output-bucket。其余可选字段包括path产物在桶内的路径前缀、name产物名称默认与项目名一致、namespaceTypeNONE或BUILD_ID等、packagingNONE或ZIP以及encryptionDisabled是否禁用加密默认false。从输出响应可以看到默认行为name为项目名、namespaceType为NONE、packaging为NONE、encryptionDisabled为false。environment构建环境environment对应ProjectEnvironmentshape必填字段为type、image、computeType三个。type构建环境类型EnvironmentType枚举值包括LINUX_CONTAINER、WINDOWS_CONTAINER、LINUX_GPU_CONTAINER、ARM_CONTAINER、LINUX_LAMBDA_CONTAINER、LINUX_EC2、MAC_ARM等示例中使用LINUX_CONTAINER。image构建所用的 Docker 镜像标识镜像 tag 或 digest示例中使用 CodeBuild 托管镜像aws/codebuild/standard:1.0。computeType计算资源规格ComputeType枚举值包括BUILD_GENERAL1_SMALL、BUILD_GENERAL1_MEDIUM、BUILD_GENERAL1_LARGE、BUILD_GENERAL1_XLARGE、BUILD_GENERAL1_2XLARGE以及 Lambda 型计算BUILD_LAMBDA_1GB至BUILD_LAMBDA_10GB、ATTRIBUTE_BASED_COMPUTE等。示例使用BUILD_GENERAL1_SMALL。可选字段中environmentVariables是构建环境变量列表每项为EnvironmentVariableshape必填字段为name、valuetype可取PLAINTEXT、PARAMETER_STORE引用 Systems Manager Parameter Store或SECRETS_MANAGER引用 Secrets Manager 机密。privilegedMode用于在容器内运行 Docker daemon构建 Docker 镜像时必须设为true。从示例输出可见imagePullCredentialsType默认值为CODEBUILD使用 CodeBuild 凭证拉取镜像。serviceRoleIAM 服务角色serviceRole是授权 CodeBuild 代表账户访问其他 AWS 服务的 IAM 角色 ARN格式如arn:aws:iam::123456789012:role/service-role/my-codebuild-service-role。服务模型明确指出它必须是非空字符串NonEmptyString。其他可选参数CreateProjectInput还支持大量可选参数description、sourceVersion、secondarySources、secondaryArtifacts、cache缓存类型默认NO_CACHE、timeoutInMinutes构建超时范围 5~2160 分钟默认 60、queuedTimeoutInMinutes排队超时示例输出为 480、encryptionKeyKMS 密钥默认alias/aws/s3、tags、vpcConfig、badgeEnabled、logsConfig、concurrentBuildLimit等可在需要时按 JSON 骨架填入。方式一命令行参数直接传参官方示例awscli/examples/codebuild/create-project.rst给出了最直接的调用方式——用内联 JSON 字符串传递结构化参数aws codebuild create-project \ --name my-demo-project \ --source {\type\: \S3\,\location\: \codebuild-us-west-2-123456789012-input-bucket/my-source.zip\} \ --artifacts {\type\: \S3\,\location\: \codebuild-us-west-2-123456789012-output-bucket\} \ --environment {\type\: \LINUX_CONTAINER\,\image\: \aws/codebuild/standard:1.0\,\computeType\: \BUILD_GENERAL1_SMALL\} \ --service-role arn:aws:iam::123456789012:role/service-role/my-codebuild-service-role返回结果示例{ project: { arn: arn:aws:codebuild:us-west-2:123456789012:project/my-demo-project, name: my-cli-demo-project, encryptionKey: arn:aws:kms:us-west-2:123456789012:alias/aws/s3, serviceRole: arn:aws:iam::123456789012:role/service-role/my-codebuild-service-role, lastModified: 1556839783.274, badge: {badgeEnabled: false}, queuedTimeoutInMinutes: 480, environment: { image: aws/codebuild/standard:1.0, computeType: BUILD_GENERAL1_SMALL, type: LINUX_CONTAINER, imagePullCredentialsType: CODEBUILD, privilegedMode: false, environmentVariables: [] }, artifacts: { location: codebuild-us-west-2-123456789012-output-bucket, name: my-cli-demo-project, namespaceType: NONE, type: S3, packaging: NONE, encryptionDisabled: false }, source: { type: S3, location: codebuild-us-west-2-123456789012-input-bucket/my-source.zip, insecureSsl: false }, timeoutInMinutes: 60, cache: {type: NO_CACHE}, created: 1556839783.274 } }返回对象为CreateProjectOutput仅包含一个project字段对应Projectshape。通过响应可以验证大量默认行为encryptionKey默认指向alias/aws/s3、timeoutInMinutes默认 60、queuedTimeoutInMinutes默认 480、缓存默认NO_CACHE、产物默认按项目名命名等。方式二通过--cli-input-json使用 JSON 输入文件当参数较多或需要版本化管理时官方文档推荐第二种方式先导出 JSON 模板填入内容后用--cli-input-json提交aws codebuild create-project --cli-input-json file://create-project.json输入文件create-project.json内容{ name: codebuild-demo-project, source: { type: S3, location: codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip }, artifacts: { type: S3, location: codebuild-region-ID-account-ID-output-bucket }, environment: { type: LINUX_CONTAINER, image: aws/codebuild/standard:1.0, computeType: BUILD_GENERAL1_SMALL }, serviceRole: serviceIAMRole }--cli-input-json的底层实现--cli-input-json由 awscli/customizations/cliinputjson.py 中的CliInputJSONArgument实现其帮助文本明确说明该参数基于--generate-cli-skeleton输出的 JSON 格式执行服务操作支持file://前缀读取本地文件也可直接内联 JSON 字符串。file://前缀的解析在 awscli/paramfile.py 的LOCAL_PREFIX_MAPfile://→ 以文本模式读取文件中定义解析后通过json.loads将内容转换为 Python 字典并注册到get-cli-input-json-data事件_update_call_parameters将 JSON 中的每个键填入调用参数仅当该键尚未在命令行中给出时才生效——也就是说命令行上显式给出的参数优先级更高会覆盖 JSON 文件中的同名项。这一命令行覆盖 JSON的行为让--cli-input-json特别适合作为模板复用同一份 JSON 文件配合不同的--name参数即可快速创建多个项目。--cli-input-json的注册逻辑会跳过带outfile流式输出参数的操作这属于设计约束CodeBuild 的create-project不受影响。方式三用--generate-cli-skeleton生成 JSON 模板官方文档建议先运行带--generate-cli-skeleton的命令生成输入模板再填充内容。其实现位于 awscli/customizations/generatecliskeleton.py 的GenerateCliSkeletonArgument# 生成输入骨架含所有可选字段便于按需填写 aws codebuild create-project --generate-cli-skeleton # 等价写法 aws codebuild create-project --generate-cli-skeleton input该参数的行为要点不发送任何 API 请求只是把CreateProjectInput的 JSON 骨架打印到标准输出骨架由botocore的ArgumentGenerator依据服务模型中的input_shape生成见 generatecliskeleton.py因此字段结构永远与当前安装的模型版本保持一致当--generate-cli-skeleton出现在命令行时必填参数被放宽为可选override_required_args以便只运行生成命令而不报错还支持--generate-cli-skeleton output此时命令会校验输入并通过StubbedCLIOperationCaller基于botocore.stub模拟返回一个示例输出 JSON可用于验证命令与参数的正确性。借助骨架你可以看到create-project支持的全部字段description、tags、vpcConfig、logsConfig等从而把示例中的五字段最小配置逐步扩展成完整生产配置。官方示例给出的create-project.json正是这个骨架的最小可运行版。常见问题与排查思路必填参数缺失name、source、artifacts、environment、serviceRole缺一不可模型在CreateProjectInput.required中显式声明CLI 会据此校验。若不确定结构先运行--generate-cli-skeleton查看完整骨架。InvalidInputException参数值不符合模型约束如computeType或type不在枚举范围内、S3location格式错误。可对照 service-2.json 中SourceType、ArtifactsType、ComputeType、EnvironmentType等枚举值逐一核对。ResourceAlreadyExistsException项目名已被占用CodeBuild 项目名在账户内必须唯一。AccountLimitExceededException已达账户可创建的构建项目数量上限。JSON 文件解析失败--cli-input-json会明确抛出Invalid JSON错误见 cliinputjson.py检查文件内容是否为合法 JSON并确认使用file://前缀时路径正确。参数被静默覆盖当同一参数同时出现在命令行与 JSON 文件中时命令行值优先生效排查时注意这一点。构建环境类型不匹配environment.type与environment.image需配套例如使用 Linux 镜像时type应为LINUX_CONTAINER。延伸阅读官方示例文档awscli/examples/codebuild/create-project.rstCodeBuild 服务模型API 形状、枚举与必填字段的权威来源awscli/botocore/data/codebuild/2016-10-06/service-2.json--cli-input-json实现awscli/customizations/cliinputjson.py--generate-cli-skeleton实现awscli/customizations/generatecliskeleton.py本地文件前缀解析file://awscli/paramfile.py相关命令示例创建 Webhook create-webhook.rst、更新项目 update-project.rst、查看项目列表 list-projects.rst单元测试参考tests/unit/customizations/test_generatecliskeleton.py、tests/functional/test_cliinputjson.py本文档中的所有命令均可按需调整区域、账户 ID、桶名与角色 ARN 后直接运行在创建项目之前请务必确认 IAM 角色已正确配置 CodeBuild 所需的权限策略。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考