本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Session Manager 中檢視執行中的建置
在 中 AWS CodeBuild,您可以暫停執行中的建置,然後使用 AWS Systems Manager Session Manager 連線到建置容器,並檢視容器的狀態。
注意
此功能不適用於 Windows 環境。
必要條件
若要允許 Session Manager 與建置工作階段搭配使用,您必須啟用建置的工作階段連線。有兩個先決條件:
-
CodeBuild Linux 標準策畫的影像已安裝SSM代理程式並 ContainerMode 啟用SSM代理程式。
如果您使用建置的自訂映像,請執行下列動作:
-
安裝SSM代理程式。如需詳細資訊,請參閱 AWS Systems Manager 使用者指南中的在 Linux EC2執行個體上手動安裝SSM代理程式。SSM 代理程式版本必須為 3.0.1295.0 或更新版本。
-
將檔案 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 與建置工作階段搭配使用,您必須啟用建置的工作階段連線。若要執行此操作,在開始建置時,請依照下列步驟執行:
在 https://console.aws.amazon.com/codesuite/Codebuild/home
開啟 AWS CodeBuild 主控台。 -
在導覽窗格中,選擇 Build projects (建置專案)。選擇建置專案,然後選擇使用覆寫 開始建置。
-
選擇 Advanced build overrides (進階組建覆寫)。
-
在環境區段中,選擇啟用工作階段連線選項。如果未選取此選項,則會忽略所有 codebuild-breakpoint和 codebuild-resume命令。
-
進行任何其他所需的變更,然後選擇開始建置 。
-
在主控台中監控建置狀態。當工作階段可用時,AWS Session Manager 連結會顯示在建置狀態區段中。
連線至建置容器
您可以透過下列兩種方式之一連線到建置容器:
- CodeBuild 主控台
-
在 Web 瀏覽器中,開啟 AWS Session Manager 連結以連線至建置容器。終端機工作階段會開啟,可讓您瀏覽和控制建置容器。
- AWS CLI
-
注意
您的本機機器必須安裝此程序的 Session Manager 外掛程式。如需詳細資訊,請參閱 AWS Systems Manager 使用者指南中的安裝 的 Session Manager 外掛程式 AWS CLI。
-
使用組建 ID 呼叫 batch-get-builds api,以取得組建的相關資訊,包括工作階段目標識別符。工作階段目標識別符屬性名稱會根據
aws
命令的輸出類型而有所不同。這就是--output json
為什麼要新增至 命令的原因。aws codebuild batch-get-builds --ids
<buildID>
--region<region>
--output json -
複製
sessionTarget
屬性值。sessionTarget
屬性名稱會因aws
命令的輸出類型而有所不同。這就是為什麼--output json
在上一個步驟中將 新增至命令的原因。 -
使用以下命令連線至建置容器。
aws ssm start-session --target
<sessionTarget>
--region<region>
-
在此範例中,請確認/tmp/hello-world
檔案是否存在並包含文字 Hello World
。
恢復建置
檢查建置容器後,請從容器 Shell 發出 codebuild-resume 命令。
$
codebuild-resume