使用 Step Functions 管理 AWS CodeBuild 构建 - AWS Step Functions

使用 Step Functions 管理 AWS CodeBuild 构建

可以将 Step Functions 与 AWS CodeBuild 集成来启动、停止和管理构建。本页列出了可以与 Step Functions 结合使用的受支持的 CodeBuild API。

要了解如何在 Step Functions 中与 AWS 服务集成,请参阅集成 服务在 Step Functions 中将参数传递给服务 API

通过将 Step Functions 与 AWS CodeBuild 集成,可以使用 Step Functions 来触发、停止和管理构建以及共享构建报告。使用 Step Functions,您可以设计和运行持续的集成管道,以验证应用程序的软件更改。

经优化的 CodeBuild 集成的主要功能
  • 支持运行作业 (.sync) 集成模式。

  • 调用 StopBuildStopBuildBatch 后,构建或构建批处理将无法立即删除,直到 CodeBuild 完成一些内部工作以最终完成构建或构建批处理的状态。

    如果您在此期间尝试使用 BatchDeleteBuildsDeleteBuildBatch,则可能无法删除构建或构建批处理。

    BatchDeleteBuildsDeleteBuildBatch 的优化服务集成包括内部重试,以简化停止后立即删除的用例。

并非所有 API 都支持所有集成模式,如下表所示。

API 请求响应 运行作业 (.sync)
StartBuild 支持 支持
StopBuild 支持 不支持
BatchDeleteBuilds 支持 不支持
BatchGetReports 支持 不支持
StartBuildBatch 支持 支持
StopBuildBatch 支持 不支持
RetryBuildBatch 支持 支持
DeleteBuildBatch 支持 不支持
Step Functions 中的参数以 PascalCase 表示

即使原生服务 API 采用 camelCase(例如 API 操作 startSyncExecution),也可以采用 PascalCase 指定参数,例如:StateMachineArn

经优化的 CodeBuild API

注意

使用 JSONPath 时,您可以使用递归下降运算符(..)为 BatchDeleteBuilds 提供参数。借助返回的数组,可以将 Arn 字段从 StartBuild 转换为复数 Ids 参数,如以下示例所示。

"BatchDeleteBuilds": { "Type": "Task", "Resource": "arn:aws:states:::codebuild:batchDeleteBuilds", "Arguments": { "Ids.$": "$.Build..Arn" }, "Next": "MyNextState" },

用于调用 AWS CodeBuild 的 IAM 策略

以下示例模板展示了 AWS Step Functions 如何根据状态机定义中的资源生成 IAM 策略。有关更多信息,请参阅Step Functions 如何为集成服务生成 IAM 策略探索 Step Functions 中的服务集成模式

资源

{ "Version":"2012-10-17", "Statement": [ { "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:sa-east-1:123456789012:StepFunctionsSample-CodeBuildExecution1111-2222-3333-wJalrXUtnFEMI-SNSTopic-bPxRfiCYEXAMPLEKEY" ], "Effect": "Allow" }, { "Action": [ "codebuild:StartBuild", "codebuild:StopBuild", "codebuild:BatchGetBuilds", "codebuild:BatchGetReports" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:sa-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule" ], "Effect": "Allow" } ] }

StartBuild

静态资源

Run a Job (.sync)
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuild", "codebuild:StopBuild", "codebuild:BatchGetBuilds" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule" ] } ] }
Request Response
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuild" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] } ] }

动态资源

Run a Job (.sync)
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuild", "codebuild:StopBuild", "codebuild:BatchGetBuilds" ], "Resource": [ "arn:aws:codebuild:us-east-1:*:project/*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildRule" ] } ] }
Request Response
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuild" ], "Resource": [ "arn:aws:codebuild:us-east-1:*:project/*" ] } ] }

StopBuild

静态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StopBuild" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] } ] }

动态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StopBuild" ], "Resource": [ "arn:aws:codebuild:us-east-1:*:project/*" ] } ] }

BatchDeleteBuilds

静态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:BatchDeleteBuilds" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] } ] }

动态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:BatchDeleteBuilds" ], "Resource": [ "arn:aws:codebuild:us-east-1:*:project/*" ] } ] }

BatchGetReports

静态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:BatchGetReports" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:report-group/myReportName" ] } ] }

动态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:BatchGetReports" ], "Resource": [ "arn:aws:codebuild:us-east-1:*:report-group/*" ] } ] }

StartBuildBatch

静态资源

Run a Job (.sync)
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuildBatch", "codebuild:StopBuildBatch", "codebuild:BatchGetBuildBatches" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildBatchRule" ] } ] }
Request Response
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuildBatch" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] } ] }

动态资源

Run a Job (.sync)
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuildBatch", "codebuild:StopBuildBatch", "codebuild:BatchGetBuildBatches" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:us-east-1:123456789012:rule/StepFunctionsGetEventForCodeBuildStartBuildBatchRule" ] } ] }
Request Response
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StartBuildBatch" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/*" ] } ] }

StopBuildBatch

静态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StopBuildBatch" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] } ] }

动态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:StopBuildBatch" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/*" ] } ] }

RetryBuildBatch

静态资源

Run a Job (.sync)
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:RetryBuildBatch", "codebuild:StopBuildBatch", "codebuild:BatchGetBuildBatches" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] } ] }
Request Response
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:RetryBuildBatch" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] } ] }

动态资源

Run a Job (.sync)
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:RetryBuildBatch", "codebuild:StopBuildBatch", "codebuild:BatchGetBuildBatches" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/*" ] } ] }
Request Response
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:RetryBuildBatch" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/*" ] } ] }

DeleteBuildBatch

静态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:DeleteBuildBatch" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/myProjectName" ] } ] }

动态资源

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codebuild:DeleteBuildBatch" ], "Resource": [ "arn:aws:codebuild:us-east-1:123456789012:project/*" ] } ] }