Commands 操作参考 - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Commands 操作参考

通过 Commands 操作,您可以在虚拟计算实例中运行 Shell 命令。运行操作时,操作配置中指定的命令会在单独的容器中运行。在运行命令的容器内部,所有指定为 CodeBuild 操作输入构件的构件均可用。通过此操作,您可以在不先创建 CodeBuild 项目的情况下指定命令。有关更多信息,请参阅《Amazon CodePipeline API 参考》中的 ActionDeclarationOutputArtifact

重要

此操作使用 CodePipeline 托管的 CodeBuild 计算在构建环境中运行命令。运行 Commands 操作将在 Amazon CodeBuild 中产生单独的费用。

注意

Commands 操作仅适用于 V2 类型管道。

Commands 操作的注意事项

Commands 操作的注意事项如下。

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

    注意

    运行 Commands 操作将在 Amazon CodeBuild 中产生单独的费用。

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

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

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

    注意

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

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

  • 跨账户操作支持 Commands 操作。要添加跨账户 Commands 操作,请在操作声明中添加目标账户中的 actionRoleArn

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

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

  • 在控制台中查看日志所需的权限详见在 CodePipeline 控制台中查看计算日志所需的权限

  • 与 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", "arn:aws:logs:*:YOUR_AWS_ACCOUNT_ID:log-group:/aws/codepipeline/YOUR_PIPELINE_NAME:*" ] }

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

操作类型

  • 类别:Compute

  • 拥有者:AWS

  • 提供方:Commands

  • 版本:1

配置参数

命令

必需:是

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

注意

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

重要

EnvironmentType 和 ComputeType 的值与 CodeBuild 中的值相匹配。我们支持一部分可用类型。有关更多信息,请参阅构建环境计算类型

EnvironmentType

必需:否

支持 Commands 操作的构建环境的 OS 映像。以下是构建环境的有效值:

  • LINUX_CONTAINER

  • WINDOWS_SERVER_2022_CONTAINER

随后,通过选择 EnvironmentType,即可在 ComputeType 字段中为该 OS 指定计算类型。有关此操作可用的 CodeBuild 计算类型的更多信息,请参阅《CodeBuild 用户指南》中的构建环境计算模式和类型参考。

注意

如果未指定,则构建环境的计算默认设置如下所示:

  • 计算类型:BUILD_GENERAL1_SMALL

  • 环境类型:LINUX_CONTAINER

ComputeType

必需:否

根据对 EnvironmentType 的选择,可以提供计算类型。以下是计算的可用值;但请注意,可用选项可能因 OS 而异。

  • BUILD_GENERAL1_SMALL

  • BUILD_GENERAL1_MEDIUM

  • BUILD_GENERAL1_LARGE

重要

某些计算类型与某些环境类型不兼容。例如,WINDOWS_SERVER_2022_CONTAINER 与 BUILD_GENERAL1_SMALL 不兼容。使用不兼容的组合会导致操作失败并产生运行时错误。

outputVariables

必需:否

指定要导出的环境变量名称。有关 CodeBuild 环境变量的参考信息,请参阅《CodeBuild 用户指南》中的构建环境中的环境变量

文件

必需:否

您可以提供想要导出的文件,作为操作的输出构件。

支持的文件格式与 CodeBuild 文件模式相同。例如,输入 **/ 表示所有文件。有关更多信息,请参阅《CodeBuild 用户指南》中的 CodeBuild 的构建规范参考

使用 Commands 操作的新管道的编辑操作页面
VpcId

必需:否

您的资源的 VPC ID。

子网

必需:否

VPC 的子网。当您的命令需要连接到 VPC 中的资源时,需要配置此字段。

SecurityGroupIds

必需:否

VPC 的安全组。当您的命令需要连接到 VPC 中的资源时,需要配置此字段。

以下是该操作的 JSON 示例,其中显示了环境和计算类型的配置字段,以及示例环境变量。

{ "name": "Commands1", "actionTypeId": { "category": "Compute", "owner": "AWS", "provider": "Commands", "version": "1" }, "inputArtifacts": [ { "name": "SourceArtifact" } ], "commands": [ "ls", "echo hello", "echo $BEDROCK_TOKEN", ], "configuration": { "EnvironmentType": "LINUX_CONTAINER", "ComputeType": "BUILD_GENERAL1_MEDIUM" }, "environmentVariables": [ { "name": "BEDROCK_TOKEN", "value": "apiTokens:bedrockToken", "type": "SECRETS_MANAGER" } ], "runOrder": 1 }

输入构件

  • 构件数:1 to 10

输出构件

  • 构件数:0 to 1

环境变量

键值对环境变量对的键,例如 BEDROCK_TOKEN

键/值对的值,例如 apiTokens:bedrockToken。可以使用管道操作中的输出变量或管道变量来参数化该值。

使用 SECRETS_MANAGER 类型时,此值必须是您已经存储在 Amazon Secrets Manager 中的密钥的名称。

类型

指定环境变量值的使用类型。该值可以是 PLAINTEXTSECRETS_MANAGER。如果值为 SECRETS_MANAGER,则在 EnvironmentVariable 值中提供密钥参考。如果未指定,则此值默认为 PLAINTEXT

注意

我们强烈建议不要使用 plaintext 环境变量存储敏感值,尤其是 Amazon 凭证。当您使用 CodeBuild 控制台或 Amazon CLI 时,plaintext 环境变量将以纯文本显示。对于敏感值,我们建议您改用 SECRETS_MANAGER 类型。

注意

为环境变量配置输入 namevaluetype 时,特别是在环境变量包含 CodePipeline 输出变量语法时,请不要超过配置值字段的 1000 字符限制。如果超过此限制,将会返回验证错误。

有关显示环境变量的操作声明示例,请参阅 配置参数

注意
  • 只有 Commands 操作支持 SECRETS_MANAGER 类型。

  • Commands 操作中引用的密钥将在构建日志中进行编辑,类似于 CodeBuild。但是,对管道拥有编辑权限的管道用户仍然可能通过修改命令来访问这些密钥值。

  • 要使用 SecretsManager,您必须为管道服务角色添加以下权限:

    { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "SECRET_ARN" ] }

服务角色权限:Commands 操作

对于 Commands 支持,将以下内容添加到策略语句中:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:iam::*:role/Service*", "arn:aws:iam::*:role/Service*" ] } ] }

操作声明(示例)

YAML
name: Commands_action actionTypeId: category: Compute owner: AWS provider: Commands version: '1' runOrder: 1 configuration: {} commands: - ls - echo hello - 'echo pipeline Execution Id is #{codepipeline.PipelineExecutionId}' outputArtifacts: - name: BuildArtifact files: - **/ inputArtifacts: - name: SourceArtifact outputVariables: - AWS_DEFAULT_REGION region: us-east-1 namespace: compute
JSON
{ "name": "Commands_action", "actionTypeId": { "category": "Compute", "owner": "AWS", "provider": "Commands", "version": "1" }, "runOrder": 1, "configuration": {}, "commands": [ "ls", "echo hello", "echo pipeline Execution Id is #{codepipeline.PipelineExecutionId}" ], "outputArtifacts": [ { "name": "BuildArtifact", "files": [ "**/" ] } ], "inputArtifacts": [ { "name": "SourceArtifact" } ], "outputVariables": [ "AWS_DEFAULT_REGION" ], "region": "us-east-1", "namespace": "compute" }

下列相关资源在您使用此操作的过程中会有所帮助。