在會話管理器中查看正在運行的構建 - AWS CodeBuild

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

在會話管理器中查看正在運行的構建

InAWS CodeBuild,則可以暫停正在運行的構建,然後使用AWS Systems Manager會話管理器連接到構建容器並查看容器的狀態。

注意

Windows 環境中無法使用此功能。

先決條件

要允許會話管理器與構建會話一起使用,必須為構建啟用會話連接。有兩個先決條件:

  • CodeBuild Linux 標準精選映像已安裝 SSM 代理並啟用 SSM 代理容器模式。

    如果要為構建使用自定義映像,請執行以下操作:

    1. 安裝 SSM Agent。如需詳細資訊,請參閱「」在 Linux 的 EC2 執行個體上手動安裝 SSM 代理中的AWS Systems Manager使用者指南。SSM 代理程式必須為 3.0.1295.0 或更新版本。

    2. 複製檔案https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/4.0/amazon-ssm-agent.json添加到/etc/amazon/ssm/目錄。這將啟用 SSM 代理中的容器模式。

  • CodeBuild 服務角色必須具有下列 SSM 政策:

    { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" }

    您可以讓 CodeBuild 控制台在啟動構建時自動將此策略附加到您的服務角色。或者,您也可以透過手動方式將此策略附加至服務角色。

  • 如果您擁有稽核和記錄工作階段活動,則 CodeBuild 服務角色還必須具有其他權限。權限不同,具體取決於日誌的存儲位置。

    CloudWatch Logs

    如果使用 CloudWatch Logs 來存儲日誌,請將以下權限添加到 CodeBuild 服務角色:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "logs:DescribeLogGroups", "Resource": "arn:aws:logs:<region-id>:<account-id>:log-group:*:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region-id>:<account-id>:log-group:<log-group-name>:*" } ] }
    Amazon S3

    如果使用 Amazon S3 來存放您的日誌,請將以下權限新增至 CodeBuild 服務角色:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetEncryptionConfiguration", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<bucket-name>", "arn:aws:s3:::<bucket-name>/*" ] } ] }

    如需詳細資訊,請參閱「」稽核和記錄工作階段活動中的AWS Systems Manager使用者指南

暫停建專案

要暫停構建,請插入codebuild-breakpoint命令在 Buildspec 檔案中的任何建置階段。此時將暫停構建,這允許您連接到構建容器並查看當前狀態的容器。

例如,將以下內容新增至 Buildspec 檔案中的建置階段。

phases: pre_build: commands: - echo Entered the pre_build phase... - echo "Hello World" > /tmp/hello-world - codebuild-breakpoint

此代碼創建/tmp/hello-world文件,然後在此時暫停構建。

啟動組建

要允許會話管理器與構建會話一起使用,必須為構建啟用會話連接。若要這麼做,啟動組建時,請依照下列步驟進行:

  1. 開啟AWS CodeBuild主控台https://console.aws.amazon.com/codesuite/codebuild/home

  2. 在導覽窗格中,選擇 Build projects (建置專案)。選擇組建專案,然後選擇 Start build (開始建置)

  3. 選擇 Advanced build overrides (進階組建覆寫)

  4. 在 中環境部分中,選擇啟用工作階段連接選項。如果未選擇此選項,則所有codebuild-breakpointcodebuild-resume命令將被忽略。

  5. 在 中環境部分中,選擇AllowAWS CodeBuild修改此服務角色,以便它可以與此構建項目一起使用選項,以允許 CodeBuild 控制台自動將會話管理器策略附加到您的服務角色。如果您已經將會話管理器政策新增至角色,則不需要選擇此選項。

  6. 進行任何其他所需的更改,然後選擇開始建專案

  7. 在控制台中監視構建狀態。當會話可用時,AWS工作階段管理員鏈接顯示於建置狀態區段。

Connect 到構建容器

您可以使用下列兩種方式的其中之一連接至 Build 容器:

CodeBuild

在 Web 瀏覽器中,開啟AWS工作階段管理員鏈接連接到構建容器。終端會話打開,允許您瀏覽和控制構建容器。

AWS CLI
注意

您的本地計算機必須為此過程安裝會話管理器插件。如需詳細資訊,請參閱「」安裝會話管理器插件AWSCLI中的AWS Systems Manager使用者指南。

  1. 呼叫batch-get-buildsapi 來獲取有關構建的信息,包括會話目標標識符。會話目標標識符屬性名稱取決於aws命令。這就是為什麼--output json將新增至命令。

    aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
  2. 複製sessionTarget屬性值。所以此sessionTarget屬性名稱可能因為aws命令。這就是為什麼--output json將新增至前一個步驟中的命令。

  3. 使用下列命令連接至 Build 容器。

    aws ssm start-session --target <sessionTarget> --region <region>

對於此示例,請驗證/tmp/hello-world文件存在並且包含文本Hello World

繼續建專案

完成生成容器的檢查後,發出codebuild-resume命令來自容器外殼。

$ codebuild-resume