命令 - AWS CodePipeline

命令

创建条件时,可以添加 Commands 规则。本节提供对规则参数的参考。有关规则和条件的更多信息,请参阅阶段条件是如何运作的?

您可以使用 Commands 规则来创建成功命令满足规则标准的条件,例如 beforeEntry 条件下成功命令的输出和文件路径。

注意

对于使用跳过结果配置的 beforeEntry 条件,只有以下规则可用:LambdaInvokeVariableCheck

Commands 规则的注意事项

Commands 规则的注意事项如下。

  • Commands 规则使用与 CodeBuild 操作类似的 CodeBuild 资源,同时允许在虚拟计算实例中执行 Shell 环境命令,而无需关联或创建构建项目。

    注意

    运行 Commands 规则将在 AWS CodeBuild 中产生单独的费用。

  • 由于 CodePipeline 中的 Commands 规则使用 CodeBuild 资源,因此该操作运行的构建将归属于您在 CodeBuild 中账户的构建限制。Commands 规则运行的构建将计入为该账户配置的并发构建限制。

  • 根据 CodeBuild 构建,使用 Commands 规则进行构建的超时时间为 55 分钟。

  • 计算实例使用 CodeBuild 中的隔离构建环境。

    注意

    由于隔离构建环境是在账户级别使用的,因此一个实例可能会被重复用于另一个管道的执行。

  • 支持除多行格式外的所有格式。输入命令时必须使用单行格式。

  • 对于这种规则,CodePipeline 将代入管道服务角色,并使用该角色允许在运行时访问资源。建议配置服务角色,以便将权限范围缩小到操作级别。

  • 添加到 CodePipeline 服务角色的权限详见向 CodePipeline 服务角色添加权限

  • 在控制台中查看日志所需的权限详见在 CodePipeline 控制台中查看计算日志所需的权限。在以下示例屏幕中,使用日志链接查看 CloudWatch 日志中的成功运行 Commands 规则的日志。

    带有 Commands 规则的管道的状态页面
    CloudWatch 中的带有 Commands 规则的管道的日志页面
  • 与 CodePipeline 中的其它操作不同,您不需要在操作配置中设置字段,而是在操作配置之外设置操作配置字段。

服务角色策略权限

当 CodePipeline 运行规则时,CodePipeline 会使用管道名称创建一个日志组,如下所示。这样就可以使用管道名称缩小日志资源的权限范围。

/aws/codepipeline/MyPipelineName

如果您使用的是现有的服务角色,要使用 Commands 操作,需要为服务角色添加以下权限。

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:PutLogEvents

在服务角色策略声明中,将权限范围缩小到管道级别,如下例所示。

{ "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:YOUR_AWS_ACCOUNT_ID:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME:*" }

要在控制台中使用操作详细信息对话框页面查看日志,必须在控制台角色中添加查看日志的权限。有关更多信息,请参阅在 CodePipeline 控制台中查看计算日志所需的权限中的控制台权限策略示例。

规则类型

  • 类别:Rule

  • 拥有者:AWS

  • 提供方:Commands

  • 版本:1

配置参数

命令

必需:是

您可以为要运行的 Commands 规则提供 Shell 命令。在控制台中,命令分行输入。在 CLI 中,命令以单独字符串的形式输入。

注意

不支持多行格式,这会导致出现错误消息。在 Commands 字段中输入命令时必须使用单行格式。

下面详细介绍了 Commands 规则使用的默认计算。有关更多信息,请参阅《CodeBuild 用户指南》中的构建环境计算模式和类型参考。

  • CodeBuild 映像:aws/codebuild/amazonlinux2-x86_64-standard:5.0

  • 计算类型:Linux Small

  • 环境计算类型值:BUILD_GENERAL1_SMALL

  • 环境类型值:LINUX_CONTAINER

规则配置示例

YAML
result: FAIL rules: - name: CommandsRule ruleTypeId: category: Rule owner: AWS provider: Commands version: '1' configuration: {} commands: - ls - printenv inputArtifacts: - name: SourceArtifact region: us-east-1
JSON
{ "result": "FAIL", "rules": [ { "name": "CommandsRule", "ruleTypeId": { "category": "Rule", "owner": "AWS", "provider": "Commands", "version": "1" }, "configuration": {}, "commands": [ "ls", "printenv" ], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1" } ] }

以下相关资源可在您使用此规则时为您提供帮助。