在 Session Manager 中檢視執行中的建置 - AWS CodeBuild

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

在 Session Manager 中檢視執行中的建置

在 中 AWS CodeBuild,您可以暫停執行中的建置,然後使用 AWS Systems Manager Session Manager 連線到建置容器,並檢視容器的狀態。

注意

此功能不適用於 Windows 環境。

必要條件

若要允許 Session Manager 與建置工作階段搭配使用,您必須啟用建置的工作階段連線。有兩個先決條件:

  • CodeBuild Linux 標準策畫的影像已安裝SSM代理程式並 ContainerMode 啟用SSM代理程式。

    如果您使用建置的自訂映像,請執行下列動作:

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

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

    注意

    自訂映像需要最新的SSM代理程式,此功能才能如預期運作。

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

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

    您可以在開始建置時,讓 CodeBuild 主控台自動將此政策連接至您的服務角色。或者,您可以手動將此政策連接至您的服務角色。

  • 如果您在 Systems Manager 偏好設定中啟用稽核和記錄工作階段活動, CodeBuild 服務角色也必須具有其他許可。許可會有所不同,具體取決於日誌的存放位置。

    CloudWatch 日誌

    如果使用 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 使用者指南 中的稽核和記錄工作階段活動

暫停建置

若要暫停建置,請在 buildspec 檔案中的任何建置階段插入 codebuild-breakpoint命令。建置將在此時暫停,可讓您連線至建置容器,並檢視容器的目前狀態。

例如,將下列項目新增至 buildspec 檔案中的建置階段。

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

此程式碼會建立 /tmp/hello-world 檔案,然後在此時暫停建置。

啟動建置

若要允許 Session Manager 與建置工作階段搭配使用,您必須啟用建置的工作階段連線。若要執行此操作,在開始建置時,請依照下列步驟執行:

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

  2. 在導覽窗格中,選擇 Build projects (建置專案)。選擇建置專案,然後選擇使用覆寫 開始建置

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

  4. 環境區段中,選擇啟用工作階段連線選項。如果未選取此選項,則會忽略所有 codebuild-breakpointcodebuild-resume命令。

  5. 進行任何其他所需的變更,然後選擇開始建置

  6. 在主控台中監控建置狀態。當工作階段可用時,AWS Session Manager 連結會顯示在建置狀態區段中。

連線至建置容器

您可以透過下列兩種方式之一連線到建置容器:

CodeBuild 主控台

在 Web 瀏覽器中,開啟 AWS Session Manager 連結以連線至建置容器。終端機工作階段會開啟,可讓您瀏覽和控制建置容器。

AWS CLI
注意

您的本機機器必須安裝此程序的 Session Manager 外掛程式。如需詳細資訊,請參閱 AWS Systems Manager 使用者指南中的安裝 的 Session Manager 外掛程式 AWS CLI

  1. 使用組建 ID 呼叫 batch-get-builds api,以取得組建的相關資訊,包括工作階段目標識別符。工作階段目標識別符屬性名稱會根據aws命令的輸出類型而有所不同。這就是--output json為什麼要新增至 命令的原因。

    aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
  2. 複製 sessionTarget 屬性值。sessionTarget 屬性名稱會因aws命令的輸出類型而有所不同。這就是為什麼--output json在上一個步驟中將 新增至命令的原因。

  3. 使用以下命令連線至建置容器。

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

在此範例中,請確認/tmp/hello-world檔案是否存在並包含文字 Hello World

恢復建置

檢查建置容器後,請從容器 Shell 發出 codebuild-resume 命令。

$ codebuild-resume