View a markdown version of this page

命令動作參考 - AWS CodePipeline

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

命令動作參考

命令動作可讓您在虛擬運算執行個體中執行 shell 命令。當您執行動作時,動作組態中指定的命令會在不同的容器中執行。所有指定為 CodeBuild 動作輸入成品的成品,都可以在執行命令的容器內使用。此動作可讓您在不先建立 CodeBuild 專案的情況下指定命令。如需詳細資訊,請參閱 AWS CodePipeline API 參考中的 ActionDeclaration 和 OutputArtifact。

重要

此動作使用 CodePipeline 受管 CodeBuild 運算在建置環境中執行命令。執行命令動作會產生個別費用 AWS CodeBuild。

注意

Commands 動作僅適用於 V2 類型管道。

命令動作的考量事項

下列考量適用於 Commands 動作。

  • 命令動作使用類似於 CodeBuild 動作的 CodeBuild 資源,同時允許虛擬運算執行個體中的 shell 環境命令,而不需要關聯或建立建置專案。

    注意

    執行命令動作會在 中產生個別費用 AWS CodeBuild。

  • 由於 CodePipeline 中的命令動作使用 CodeBuild 資源,因此動作執行的組建將歸因於 CodeBuild 中您帳戶的組建限制。由 Commands 動作執行的組建將計入針對該帳戶設定的並行組建限制。

  • 根據 CodeBuild 組建,使用 Commands 動作的組建逾時為 55 分鐘。

  • 運算執行個體在 CodeBuild 中使用隔離的建置環境。

    注意

    由於隔離的建置環境是在帳戶層級使用,因此執行個體可能會重複使用於另一個管道執行。

  • 除了多行格式之外,支援所有格式。輸入命令時,您必須使用單行格式。

  • 跨帳戶動作支援命令動作。若要新增跨帳戶命令動作,請在動作宣告中actionRoleArn從您的目標帳戶新增 。

  • 對於此動作,CodePipeline 將擔任管道服務角色,並使用該角色允許在執行時間存取資源。建議設定服務角色,以便將許可範圍縮小至動作層級。

  • 新增至 CodePipeline 服務角色的許可詳述於 將許可新增至 CodePipeline 服務角色。

  • 在 主控台中檢視日誌所需的許可詳述於 在主控台中檢視運算日誌所需的許可。

  • 與 CodePipeline 中的其他動作不同,您不要在動作組態中設定欄位,而是在動作組態之外設定動作組態欄位。

服務角色政策許可

CodePipeline 執行動作時,CodePipeline 會使用管道的名稱建立日誌群組,如下所示。這可讓您縮小使用管道名稱記錄資源的許可範圍。

/aws/codepipeline/MyPipelineName

如果您使用的是現有的服務角色,若要使用 命令動作,您需要為服務角色新增下列許可。

  • 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:*" ] }

若要使用動作詳細資訊對話方塊頁面在主控台中檢視日誌,必須將檢視日誌的許可新增至主控台角色。如需詳細資訊,請參閱 中的主控台許可政策範例在主控台中檢視運算日誌所需的許可。

動作類型

  • 類別:Compute

  • 擁有者:AWS

  • 提供者:Commands

  • 版本:1

組態參數

命令

必要:是

您可以為要執行Commands的動作提供 shell 命令。在 主控台中,命令會在不同的行上輸入。在 CLI 中,命令會以個別字串輸入。

注意

不支援多行格式,且會導致錯誤訊息。單行格式必須用於在命令欄位中輸入命令。

重要

EnvironmentType 和 ComputeType 值符合 CodeBuild 中的值。我們支援可用類型的子集。如需詳細資訊,請參閱建置環境運算類型。

EnvironmentType

必要:否

支援 Commands 動作之建置環境的作業系統映像。以下是組建環境的有效值:

  • LINUX_CONTAINER

  • WINDOWS_SERVER_2022_CONTAINER

然後EnvironmentType 的選擇將允許 ComputeType 欄位中該作業系統的ComputeType類型。如需此動作可用的 CodeBuild 運算類型的詳細資訊,請參閱 CodeBuild 使用者指南中的建置環境運算模式和類型參考。

注意

如果未指定,則 運算預設為建置環境的下列項目:

  • 運算類型:BUILD_GENERAL1_SMALL

  • 環境類型:LINUX_CONTAINER

ComputeType

必要:否

根據 EnvironmentType 的選擇,可以提供運算類型。以下是運算的可用值;不過,請注意,可用的選項可能因作業系統而有所不同。

  • BUILD_GENERAL1_SMALL

  • BUILD_GENERAL1_MEDIUM

  • BUILD_GENERAL1_LARGE

重要

有些運算類型與特定環境類型不相容。例如,WINDOWS_SERVER_2022_CONTAINER 與 BUILD_GENERAL1_SMALL 不相容。使用不相容的組合會導致 動作失敗,並產生執行時間錯誤。

outputVariables

必要:否

指定您環境中要匯出的變數名稱。如需 CodeBuild 環境變數的參考,請參閱 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 }

Input artifacts (輸入成品)

  • 成品數量: 1 to 10

輸出成品

  • 成品數量: 0 to 1

環境變數

金錀

鍵值環境變數對中的索引鍵,例如 BEDROCK_TOKEN。

Value

鍵/值對的值,例如 apiTokens:bedrockToken。該值可以使用管道動作或管道變數的輸出變數進行參數化。

使用 SECRETS_MANAGER類型時,此值必須是您已存放在 Secrets Manager 中的 AWS 秘密名稱。

Type

指定環境變數值的使用類型。此值可以是 PLAINTEXT 或 SECRETS_MANAGER。如果值為 SECRETS_MANAGER,請在 EnvironmentVariable值中提供 Secrets 參考。未指定時,則將預設為 PLAINTEXT。

注意

我們強烈建議不使用純文字環境變數來存放敏感值,尤其是 AWS 登入資料。當您使用 CodeBuild 主控台或 時 AWS CLI,純文字環境變數會以純文字顯示。對於敏感值,建議您改用 SECRETS_MANAGER 類型。

注意

當您type為環境變數組態輸入 name、 value和 時,特別是在環境變數包含 CodePipeline 輸出變數語法時,請勿超過組態值欄位的 1000 個字元限制。如果超過此限制,系統就會傳回驗證錯誤。

如需顯示環境變數的動作宣告範例,請參閱 組態參數。

注意
  • SECRETS_MANAGER 類型僅支援 Commands 動作。

  • 命令動作中參考的秘密將在類似於 CodeBuild 的建置日誌中修訂。但是具有管道編輯存取權的管道使用者,仍然可以透過修改命令來存取這些秘密值。

  • 若要使用 SecretsManager,您必須將下列許可新增至管道服務角色:

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

服務角色許可:命令動作

對於 命令支援,請將下列項目新增至您的政策陳述式:

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" }

以下相關資源可協助您使用此動作。