在会话管理器中查看正在运行的构建 - AWS CodeBuild
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在会话管理器中查看正在运行的构建

在 中AWS CodeBuild,您可以暂停正在运行的构建,然后使用AWS Systems Manager会话管理器连接到构建容器并查看容器的状态。

注意

此功能在 Windows 环境中不可用。

Prerequisites

要允许将会话管理器用于构建会话,您必须为构建启用会话连接。有两个先决条件:

  • CodeBuild Linux 标准辅助映像已安装 SSM 代理并ContainerMode启用了 SSM 代理。

    如果您对构建使用自定义映像,请执行以下操作:

    1. 安装 SSM 代理。有关更多信息,请参阅 中的在适用于 Linux 的 EC2 实例上手动安装 SSM 代理AWS Systems Manager 用户指南。

    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 控制台自动将此策略附加到您的服务角色。或者,您也可以手动将此策略附加到您的服务角色。

  • 如果您在 首选项中启用了审核和日志记录会话活动Systems Manager,则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>/*" ] } ] }

    有关更多信息,请参阅 中的https://docs.amazonaws.cn/systems-manager/latest/userguide/session-manager-logging-auditing.html审计和记录会话活动AWS Systems Manager 用户指南

暂停构建

要暂停构建,请在构建规范文件中的任何构建阶段中插入 codebuild-breakpoint 命令。此时,构建将暂停,这允许您连接到构建容器并查看其当前状态的容器。

例如,将以下内容添加到 buildspec 文件中的构建阶段。

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

此代码将创建 /tmp/hello-world 文件,然后在此时暂停构建。

启动构建

要允许将会话管理器用于构建会话,您必须为构建启用会话连接。为此,在启动构建时,请执行以下步骤:

  1. Open the AWS CodeBuild console at https://console.amazonaws.cn/codesuite/codebuild/home.

  2. 在导航窗格中,选择 Build projects. 选择构建项目,然后选择 Start build.

  3. 选择 Advanced build overrides (高级构建覆盖).

  4. Environment (环境) 部分中,选择 Enable session connection (启用会话连接) 选项。如果未选择此选项,则忽略所有 codebuild-breakpointcodebuild-resume 命令。

  5. Environment (环境) 部分中,选择 Allow AWS CodeBuild to modify this service role so it can be used with this build project (允许 AWS 修改此服务角色,以便它可用于此构建项目) 选项以允许CodeBuild控制台自动将会话管理器策略附加到您的服务角色。如果您已将会话管理器策略添加到您的角色,则无需选择此选项。

  6. 进行任何其他所需更改,然后选择 Start build (开始构建)。

  7. 在 控制台中监控构建状态。当会话可用时,AWS Session Manager (AWS 会话管理器) 链接将显示在 Build status (构建状态) 部分中。

连接到构建容器

您可以通过以下两种方式之一连接到构建容器:

CodeBuild 控制台

在 Web 浏览器中,打开 AWS Session Manager 链接以连接到构建容器。终端会话将打开,您可以浏览和控制构建容器。

AWS CLI
注意

对于此过程,您的本地计算机必须已安装 Session Manager 插件。有关更多信息,请参阅 中的安装 AWS CLI 的会话管理器插件AWS Systems Manager 用户指南。

  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