在会话管理器中查看正在运行的版本 - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在会话管理器中查看正在运行的版本

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

注意

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

先决条件

要允许会话管理器与生成会话一起使用,必须为生成启用会话连接。有两个先决条件:

  • CodeBuildLinux 标准精选映像已经安装了 SSM 代理并ContainerMode启用了 SSM 代理。

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

    1. 安装 SSM Agent 有关更多信息,请参阅《Amazon Systems Manager用户指南》中的在 Linux EC2 实例上手动安装 SSM Agent。SSM Agent 版本必须为 3.1255.0 或更高版本的 SSM Agent 版本。

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

    有关更多信息,请参阅《Amazon 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文件,然后在此时暂停构建。

开始开始开始

要允许会话管理器与生成会话一起使用,必须为生成启用会话连接。要进行此操作,请执行以下步骤:

  1. 通过 https://console.aws.amazon.com/codesuite/codebuild/home 打开Amazon CodeBuild主机。

  2. 在导航窗格中,选择 Build projects。选择生成项目,然后选择 “使用覆盖项开始构建”。

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

  4. 在 “环境” 部分中,选择 “启用会话连接” 选项。如果未选择此选项,则会忽略所有codebuild-breakpointcodebuild-resume命令。

  5. 在 “环境” 部分中,选择 “Amazon CodeBuild允许修改此服务角色”,以便将其与该构建项目选项一起使用,以允许CodeBuild控制台自动将会话管理器策略附加到您的服务角色。如果您已经将会话管理器策略添加到您的角色中,则无需选择此选项。

  6. 进行任何其他所需的更改,然后选择 “开始构建”。

  7. 在控制台中监控构建状态。当会话可用时,Amazon会话管理器链接将显示在 “生成状态” 部分中。

Connect 编译容器

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

CodeBuild 控制台

在 Web 浏览器中,打开会Amazon话管理器链接以连接到生成容器。终端会话打开,允许您浏览和控制生成容器。

Amazon CLI
注意

您的本地计算机必须安装会话管理器插件才能执行此过程。有关更多信息,请参阅《Amazon Systems Manager用户指南》中的Amazon 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