AWS::CodeBuild::Project - AWS CloudFormation
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS::CodeBuild::Project

AWS::CodeBuild::Project 资源配置 AWS CodeBuild 生成源代码的方式。例如,它将告知 CodeBuild 源代码的获取位置以及要使用的生成环境。

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "Type" : "AWS::CodeBuild::Project", "Properties" : { "Artifacts" : Artifacts, "BadgeEnabled" : Boolean, "Cache" : ProjectCache, "Description" : String, "EncryptionKey" : String, "Environment" : Environment, "FileSystemLocations" : [ ProjectFileSystemLocation, ... ], "LogsConfig" : LogsConfig, "Name" : String, "QueuedTimeoutInMinutes" : Integer, "SecondaryArtifacts" : [ Artifacts, ... ], "SecondarySources" : [ Source, ... ], "SecondarySourceVersions" : [ ProjectSourceVersion, ... ], "ServiceRole" : String, "Source" : Source, "SourceVersion" : String, "Tags" : [ Tag, ... ], "TimeoutInMinutes" : Integer, "Triggers" : ProjectTriggers, "VpcConfig" : VpcConfig } }

属性

Artifacts

ArtifactsAWS::CodeBuild::Project 资源的属性,它为由 AWS CodeBuild 构建生成的构件指定输出设置。

必需:是

类型Artifacts

Update requires: No interruption

BadgeEnabled

指示 AWS CodeBuild 是否为您项目的构建徽章生成可公开访问的 URL。有关更多信息,请参阅 AWS CodeBuild 用户指南 中的构建徽章示例

注意

目前,如果源类型为 CodePipeline,则不支持在项目中包括构建徽章。如果您为 Source 属性指定 CODEPIPELINE,请勿指定 BadgeEnabled 属性。

必需:否

类型:布尔值

Update requires: No interruption

Cache

AWS CodeBuild 用于存储和重复使用构建依赖项的设置。

必需:否

类型ProjectCache

Update requires: No interruption

Description

使构建项目易于识别的描述。

必需:否

类型:字符串

最低0

最高255

Update requires: No interruption

EncryptionKey

CodeBuild 用于加密构建输出的 AWS Key Management Service (AWS KMS) 客户主密钥 (CMK) 的别名或 Amazon 资源名称 (ARN)。如果您未指定值,CodeBuild 将使用 Amazon Simple Storage Service (Amazon S3) 的 AWS 托管 CMK。

注意

如果您的服务角色具有一个跨账户 KMS 密钥的权限,则您可使用此密钥来加密构建输出构件。

您可以指定 CMK 的 Amazon 资源名称 (ARN) ,或者(如果可用)指定 CMK 的别名(采用 alias/alias-name 格式)。

必需:否

类型:字符串

最低1

Update requires: No interruption

Environment

项目的生成环境设置,如环境类型或要用于生成环境的环境变量。

必需:是

类型Environment

Update requires: No interruption

FileSystemLocations

CodeBuild 构建项目的 ProjectFileSystemLocation 对象数组。ProjectFileSystemLocation 对象指定使用 Amazon Elastic File System 创建的文件系统的 identifierlocationmountOptionsmountPointtype

必需:否

类型ProjectFileSystemLocation 列表

Update requires: No interruption

LogsConfig

有关构建项目的日志的信息。项目可以在 Amazon CloudWatch Logs 和/或 S3 存储桶中创建日志。

必需:否

类型LogsConfig

Update requires: No interruption

Name

构建项目的名称。此名称在您的 AWS 账户的所有项目中必须是唯一的。

必需:否

类型:字符串

最低2

最高255

模式[A-Za-z0-9][A-Za-z0-9\-_]{1,254}

Update requires: Replacement

QueuedTimeoutInMinutes

一个构建在超时前可在队列中等待的分钟数。

必需:否

类型:整数

最低5

最高480

Update requires: No interruption

SecondaryArtifacts

Artifacts 对象的列表。每个构件对象指定项目在构建期间生成的输出设置。

必需:否

类型构件的列表

最高12

Update requires: No interruption

SecondarySources

ProjectSource 对象数组。

必需:否

类型的列表

最高12

Update requires: No interruption

SecondarySourceVersions

ProjectSourceVersion 数据元数组。如果在构建级别指定 secondarySourceVersions,它们会接管这些 secondarySourceVersions(在项目级别)。

必需:否

类型ProjectSourceVersion 的列表

最高12

Update requires: No interruption

ServiceRole

AWS Identity and Access Management (IAM) 角色的 ARN,该角色使 AWS CodeBuild 能够代表 AWS 账户与从属 AWS 服务进行交互。

必需:是

类型:字符串

最低1

Update requires: No interruption

Source

项目的源代码设置,如源代码的存储库类型和位置。

必需:是

类型Source

Update requires: No interruption

SourceVersion

要为此项目构建的构建输入的版本。如果未指定,则使用最新版本。如果已指定,则它必须是下列项之一:

  • 对于 AWS CodeCommit:要使用的提交 ID、分支或 Git 标签。

  • 对于 GitHub:提交 ID、拉取请求 ID、分支名称或与要构建的源代码版本相对应的标签名称。如果指定了拉取请求 ID,则它必须使用格式 pr/pull-request-ID(例如,pr/25)。如果指定了分支名称,则将使用分支的 HEAD 提交 ID。如果未指定,则使用默认分支的 HEAD 提交 ID。

  • 对于 Bitbucket:提交 ID、分支名称或与要构建的源代码版本相对应的标签名称。如果指定了分支名称,则将使用分支的 HEAD 提交 ID。如果未指定,则使用默认分支的 HEAD 提交 ID。

  • 对于 Amazon Simple Storage Service (Amazon S3):表示要使用的构建输入 ZIP 文件的对象的版本 ID。

如果在构建级别指定 sourceVersion,则该版本将优先于此 sourceVersion(在对象级别)。

有关更多信息,请参阅 AWS CodeBuild 用户指南 中的 使用 CodeBuild 的源版本示例

必需:否

类型:字符串

Update requires: No interruption

Tags

AWS CodeBuild 项目的任意标签组(键值对)。

这些标签可供支持 AWS CodeBuild 构建项目标签的 AWS 服务使用。

必需:否

类型Tag 的列表

最高50

Update requires: No interruption

TimeoutInMinutes

AWS CodeBuild 在任何未标记为已完成的相关构建超时前等待的时长(5 到 480 分钟(8 个小时))。默认为 60 分钟。

必需:否

类型:整数

最低5

最高480

Update requires: No interruption

Triggers

对于将其源代码存储在 GitHub 存储库中的现有 AWS CodeBuild 构建项目,使 AWS CodeBuild 能够在每次代码更改推送到该存储库时开始自动重新构建源代码。

必需:否

类型ProjectTriggers

Update requires: No interruption

VpcConfig

VpcConfig 指定允许 AWS CodeBuild 访问 Amazon VPC 中的资源的设置。有关更多信息,请参阅 AWS CodeBuild 用户指南 中的将 AWS CodeBuild 与 Amazon Virtual Private Cloud 结合使用

必需:否

类型VpcConfig

Update requires: No interruption

返回值

Ref

当向 Ref 内部函数提供此资源的逻辑 ID 时,Ref 将返回 AWS CodeBuild 项目的名称,例如 myProjectName

有关使用 Ref 函数的更多信息,请参阅 Ref

Fn::GetAtt

Fn::GetAtt 返回一个此类型指定属性的值。以下为可用属性和示例返回值。有关使用 Fn::GetAtt 的更多信息,请参阅 Fn::GetAtt

Arn

AWS CodeBuild 项目的 ARN,如 arn:aws:codebuild:us-west-2:123456789012:project/myProjectName

示例

创建项目

以下示例创建一个 AWS CodeBuild 项目。

JSON

{ "Project": { "Type": "AWS::CodeBuild::Project", "Properties": { "Name": "myProjectName", "Description": "A description about my project", "ServiceRole": { "Fn::GetAtt": [ "ServiceRole", "Arn" ] }, "Artifacts": { "Type": "no_artifacts" }, "Environment": { "Type": "LINUX_CONTAINER", "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/java:openjdk-8", "EnvironmentVariables": [ { "Name": "varName", "Value": "varValue" } ] }, "Source": { "Location": "codebuild-demo-test/0123ab9a371ebf0187b0fe5614fbb72c", "Type": "S3" }, "TimeoutInMinutes": 10, "Tags": [ { "Key": "Key1", "Value": "Value1" }, { "Key": "Key2", "Value": "Value2" } ] } } }

YAML

Project: Type: AWS::CodeBuild::Project Properties: Name: myProjectName Description: A description about my project ServiceRole: !GetAtt ServiceRole.Arn Artifacts: Type: no_artifacts Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/java:openjdk-8 EnvironmentVariables: - Name: varName Value: varValue Source: Location: codebuild-demo-test/0123ab9a371ebf0187b0fe5614fbb72c Type: S3 TimeoutInMinutes: 10 Tags: - Key: Key1 Value: Value1 - Key: Key2 Value: Value2

创建一个包含两个筛选条件组的项目。

以下示例创建一个包含两个筛选条件组的项目。当这两个筛选条件的其中一个或两个评估为 True 时触发构建:

  • 第一个筛选条件组使用与正则表达式 ^refs/heads/master$ 匹配的 Git 引用名称,指定由账户 ID 不为 12345 的 GitHub 用户在分支上创建或更新的拉取请求。

  • 第二个筛选条件组使用与正则表达式 ^refs/heads/.* 匹配的 Git 引用名称,指定在名称与正则表达式 READ_ME 匹配的文件上创建的推送请求。

在此示例中,服务角色的名称为 my-example-service-role。源位置的名称为 my-example-source-location

YAML

CodeBuildProject: Type: AWS::CodeBuild::Project Properties: Name: MyProject ServiceRole: my-example-service-role Artifacts: Type: NO_ARTIFACTS Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:1.0 Source: Type: GITHUB Location: my-example-source-location Triggers: Webhook: true FilterGroups: - - Type: EVENT Pattern: PULL_REQUEST_CREATED,PULL_REQUEST_UPDATED - Type: BASE_REF Pattern: ^refs/heads/master$ ExcludeMatchedPattern: false - Type: ACTOR_ACCOUNT_ID Pattern: 12345 ExcludeMatchedPattern: true - - Type: EVENT Pattern: PUSH - Type: HEAD_REF Pattern: ^refs/heads/.* - Type: FILE_PATH Pattern: READ_ME ExcludeMatchedPattern: true

JSON

{ "CodeBuildProject": { "Type": "AWS::CodeBuild::Project", "Properties": { "Name": "MyProject", "ServiceRole": "my-example-service-role", "Artifacts": { "Type": "NO_ARTIFACTS" }, "Environment": { "Type": "LINUX_CONTAINER", "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/standard:1.0" }, "Source": { "Type": "GITHUB", "Location": "my-example-source-location" }, "Triggers": { "Webhook": true, "FilterGroups": [ [ { "Type": "EVENT", "Pattern": "PULL_REQUEST_CREATED,PULL_REQUEST_UPDATED" }, { "Type": "BASE_REF", "Pattern": "^refs/heads/master$", "ExcludeMatchedPattern": false }, { "Type": "ACTOR_ACCOUNT_ID", "Pattern": 12345, "ExcludeMatchedPattern": true } ], [ { "Type": "EVENT", "Pattern": "PUSH" }, { "Type": "HEAD_REF", "Pattern": "^refs/heads/.*" }, { "Type": "FILE_PATH", "Pattern": "READ_ME", "ExcludeMatchedPattern": true } ] ] } } } }

使用 Amazon S3 和 Amazon VPC 创建项目

以下示例创建一个在 Amazon S3 中缓存构建依赖项并且使用 Amazon VPC 中的资源的项目。

YAML

Resources: CodeBuildProject: Type: AWS::CodeBuild::Project Properties: ServiceRole: !GetAtt CodeBuildRole.Arn Artifacts: Type: CODEPIPELINE Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/ubuntu-base:14.04 EnvironmentVariables: - Name: varName1 Value: varValue1 - Name: varName2 Value: varValue2 Type: PLAINTEXT - Name: varName3 Value: /CodeBuild/testParameter Type: PARAMETER_STORE Source: Type: CODEPIPELINE TimeoutInMinutes: 10 VpcConfig: VpcId: !Ref CodeBuildVPC Subnets: [!Ref CodeBuildSubnet] SecurityGroupIds: [!Ref CodeBuildSecurityGroup] Cache: Type: S3 Location: mybucket/prefix CodeBuildRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Action: ['sts:AssumeRole'] Effect: Allow Principal: Service: [codebuild.amazonaws.com] Version: '2012-10-17' Path: / Policies: - PolicyName: CodeBuildAccess PolicyDocument: Version: '2012-10-17' Statement: - Action: - 'logs:*' - 'ec2:CreateNetworkInterface' - 'ec2:DescribeNetworkInterfaces' - 'ec2:DeleteNetworkInterface' - 'ec2:DescribeSubnets' - 'ec2:DescribeSecurityGroups' - 'ec2:DescribeDhcpOptions' - 'ec2:DescribeVpcs' - 'ec2:CreateNetworkInterfacePermission' Effect: Allow Resource: '*' CodeBuildVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 EnableDnsSupport: 'true' EnableDnsHostnames: 'true' Tags: - Key: name Value: codebuild CodeBuildSubnet: Type: AWS::EC2::Subnet Properties: VpcId: Ref: CodeBuildVPC CidrBlock: 10.0.1.0/24 CodeBuildSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupName: Codebuild Internet Group GroupDescription: 'CodeBuild SecurityGroup' VpcId: !Ref CodeBuildVPC

JSON

{ "Resources": { "CodeBuildProject": { "Type": "AWS::CodeBuild::Project", "Properties": { "ServiceRole": { "Fn::GetAtt": [ "CodeBuildRole", "Arn" ] }, "Artifacts": { "Type": "CODEPIPELINE" }, "Environment": { "Type": "LINUX_CONTAINER", "ComputeType": "BUILD_GENERAL1_SMALL", "Image": "aws/codebuild/ubuntu-base:14.04", "EnvironmentVariables": [ { "Name": "varName1", "Value": "varValue1" }, { "Name": "varName2", "Value": "varValue2", "Type": "PLAINTEXT" }, { "Name": "varName3", "Value": "/CodeBuild/testParameter", "Type": "PARAMETER_STORE" } ] }, "Source": { "Type": "CODEPIPELINE" }, "TimeoutInMinutes": 10, "VpcConfig": { "VpcId": { "Ref": "CodeBuildVPC" }, "Subnets": [ { "Ref": "CodeBuildSubnet" } ], "SecurityGroupIds": [ { "Ref": "CodeBuildSecurityGroup" } ] }, "Cache": { "Type": "S3", "Location": "mybucket/prefix" } } }, "CodeBuildRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { "Service": [ "codebuild.amazonaws.com" ] } } ], "Version": "2012-10-17" }, "Path": "/", "Policies": [ { "PolicyName": "CodeBuildAccess", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:*", "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeDhcpOptions", "ec2:DescribeVpcs", "ec2:CreateNetworkInterfacePermission" ], "Effect": "Allow", "Resource": "*" } ] } } ] } }, "CodeBuildVPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.0.0.0/16", "EnableDnsSupport": "true", "EnableDnsHostnames": "true", "Tags": [ { "Key": "name", "Value": "codebuild" } ] } }, "CodeBuildSubnet": { "Type": "AWS::EC2::Subnet", "Properties": { "VpcId": { "Ref": "CodeBuildVPC" }, "CidrBlock": "10.0.1.0/24" } }, "CodeBuildSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupName": "Codebuild Internet Group", "GroupDescription": "CodeBuild SecurityGroup", "VpcId": { "Ref": "CodeBuildVPC" } } } } }

另请参阅