本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在会话管理器中查看正在运行的版本
在中Amazon CodeBuild,您可以暂停正在运行的构建,然后使用 SessAmazon Systems Manager ion Manager 连接到生成容器并查看容器的状态。
此功能在 Windows 环境中不可用。
先决条件
要允许会话管理器与生成会话一起使用,必须为生成会话启用会话连接。有两个先决条件:
-
CodeBuild Linux 标准精选映像已经安装了 SSM 代理并 ContainerMode 启用了 SSM 代理。
如果您在构建中使用自定义镜像,请执行以下操作:
-
安装 SSM Agent 有关更多信息,请参阅在 Linux EC2 实例上手动安装 SSM Agent。Amazon Systems ManagerSSM Agent 版本必须为 3.0.1295.0 或更高版本。
-
将文件 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 日志
-
如果使用 CloudWatch 日志存储日志,请为 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命令。此时构建将暂停,这允许您连接到构建容器并查看容器的当前状态。
例如,将以下内容添加到构建 spec 文件中的构建。
phases: pre_build: commands: - echo Entered the pre_build phase... - echo "Hello World" > /tmp/hello-world - codebuild-breakpoint
此时此代码会创建/tmp/hello-world
文件,然后暂停构建。
开始构建
要允许会话管理器与生成会话一起使用,必须为生成会话启用会话连接。为此,在开始构建,应按照以下步骤执行:
通过 https://console.aws.amazon.com/codesuite/codebuild/home
打开Amazon CodeBuild主机。 -
在导航窗格中,选择 Build projects。选择构建项目,然后选择 “使用替代项开始构建”。
-
选择 Advanced build overrides (高级构建覆盖)。
-
在 “环境” 部分中,选择 “启用会话连接” 选项。如果未选择此选项,则会忽略所有codebuild-breakpoint和codebuild-resume命令。
-
在 “环境” 部分中,选择 “Amazon CodeBuild允许修改此服务角色以便可以将其与该构建项目一起使用” 选项,以允许 CodeBuild 控制台自动将会话管理器策略附加到您的服务角色。如果您已将会话管理器策略添加到您的角色,则无需选择此选项。
-
进行任何其他所需的更改,然后选择 “开始构建”。
-
在控制台中监控构建。当会话可用时,“Amazon会话管理器” 链接将显示在 “生成状态” 部分中。
Connect 生成容器
您可以通过以下两种方式之一连接到构建 Container:
- CodeBuild 控制台
-
在 Web 浏览器中,打开Amazon会话管理器链接以连接到生成容器。终端会话打开,允许您浏览和控制生成容器。
- Amazon CLI
-
注意 您的本地计算机必须安装会话管理器插件才能执行此过程。有关更多信息,请参阅《Amazon Systems Manager用户指南》中的 “安装适用于Amazon 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
这就是为什么要添加到上一步中的命令中。 -
使用以下命令连接到构建 Container。
aws ssm start-session --target
<sessionTarget>
--region<region>
-
在此示例中,验证/tmp/hello-world
文件是否存在且包含文本Hello World
。
恢复构建
检查完生成容器后,从容器 shell 发出codebuild-resume命令。
$
codebuild-resume