赞
踩
Incredibuild 构建系统包括多个组件,它们相互作用以加速构建。在这篇文章中,我将描述如何在 AWS 上设置该系统。对于想要了解更多有关 AWS 和 Incredibuild 系统的人而言,这会非常有用。
这是我们关注使用按需 AWS EC2 机器的两篇文章的第一部分。在第二部分中,我们将学习如何使用 spot 实例来实现自动化资源管理和更好的成本效益。
要完成本文中列出的步骤,您需要拥有一个具有完全管理员权限的 AWS 帐户和一个 Incredibuild 许可证。
假定您对 Linux 和命令行了解很少。
我们将从创建托管所有支持网络组件的 VPC 开始。我们将创建以下网络组件:
第一步是登录 AWS 帐户。在顶部搜索框中键入 “VPC” 并单击 VPC 服务。在右上角,检查您是否选择了希望在其中创建所有组件的区域。
在左侧边栏中,单击 “Your VPCs”,然后选择 “Create VPC” 并输入以下内容:
接下来,单击 “Subnets” 并选择 “Create subnet.”,然后输入以下内容:
最后,单击 “Internet Gateways”,然后单击 “Create internet gateway” 并输入以下内容:
互联网网关为您的实例提供对外部互联网的访问。
在您创建的互联网网关页面中,单击 “Actions” 并选择 “Attach to VPC”。然后,选择 “Incredibuild” VPC 并单击 “Attach internet gateway”
在左侧边栏中,单击 “Route Tables”。在路由表中,查看连接到 “Incredibuild” VPC 的路由表的 VPC 列。右键单击该列并选择 “edit routes”。单击 “Add route” 并为新路由填写以下内容:
此操作用于指示将所有非内部流量路由到外部互联网。
在左侧边栏中,单击 “Security Groups”,然后选择 “Create security group” 并输入以下内容:
在左侧边栏中,单击 “Security Groups”,然后右键单击 “Incredibuild” 安全组并选择 “Edit inbound rules”。单击 “Add Rule” 并输入以下内容:
此安全组将允许从您的外部 IP 地址访问实例上的任何端口,还允许此安全组内的实例之间进行内部通信(以便 coordinator 和agent之间进行通信)。我们还允许从任何 IP 进行 SSH 访问,这样我们能够使用 AWS 连接功能轻松连接到实例,而无需设置 SSH 客户端和密钥。
coordinator 实例是将工作分配给agent的主要实例。为简单起见,我们将使用同一台服务器来启动构建并作为agent。
在 AWS 控制台顶部的搜索栏中键入 “EC2” 并单击 EC2 服务。
在左侧边栏中,单击 “Instances”,然后选择 “Launch instances” 并输入以下内容:
在左侧边栏中,单击 “Instances” 并等待实例状态变为 “Running”。开始运行后,右键单击 incredibuild-coordinator 实例并单击 “Connect”,在连接屏幕中再次单击 “Connect” 按钮。终端窗口应在服务器上打开一个 shell 会话。
安装 Incredibuild coordinator 时,需要从 Incredibuild 获取 Incredibuild 安装二进制文件的链接(查看此链接获取免费试用版)。
获得该链接后,输入以下命令:
wget -Oincredibuild.ubin URL
输入以下命令以安装 coordinator:
sudo bash ./incredibuild.ubin install -i -C -S -A /etc/Incredibuild
安装参数说明:
您现在可以关闭终端窗口并返回实例列表,复制 incredibuild-coordinator 实例的公共 IP,并使用以下 URL 访问 Incredibuild 网页用户界面(将 COORDINATOR_IP 替换为公共 IP):http://COORDINATOR_IP :8080
注册 Incredibuild 许可证时,单击 “Coordinator Monitor” 并等待,直到 “Checking Status…” 消息被替换为 “Coordinator Settings” 按钮。单击该按钮,然后单击 “License” 选项卡,再单击 “Generate Key File”。下载密钥文件并将其发送给您的 Incredibuild 代表进行注册。您应该获得一个许可证文件,您应该通过单击 “Choose File”,然后单击 “Load File” 从同一位置上传该文件
您现在应该能够看到您的许可证注册详细信息,并且可以开始使用 Incredibuild 系统。
Incredibuild 安装包括一个 C++ 项目示例,我们可以使用它来测试 Incredibuild Coordinator 并确保一切正常。
首先,我们需要减少 Incredibuild 系统默认需要的最小 CPU 内核数量,以适应我们使用的较小实例。在 Incredibuild 网页用户界面中,单击 “Agent Settings” 并在 “General” 选项卡下将 “minimum local cores for build” 修改为 “2”
连接到 Incredibuild-coordinator 实例 (AWS EC2 -> instances -> connect) 并运行以下命令来安装所需的构建依赖项:
sudo apt-get update && sudo apt-get install -y build-essential
build-essential 软件包中包括编译 C++ 项目示例所需的全部构建工具。
要使用 Incredibuild 系统启动编译,可运行以下命令:
cd /opt/incredibuild/samples/make_build
ib_console make -j 20
编译应该很快完成,因为它只是一个用于验证安装的非常小的示例项目。
登录到 coordinator 网页用户界面并单击 “Build History”,此时您应该会看到名为 “Build 1” 的构建:
单击该构建的操作按钮 -> 打开 -> 新选项卡。您可以查看构建详细信息,单击不同的选项卡可以查看可用的详细信息。
agent实例处理从 coordinator 分配给它们的工作负载。我们将使用 AWS 自动缩放组根据需要动态分配agent。这样,在不使用时可以缩小到 0,并在需要时轻松扩展到所需的尽可能多的agent。
首先,我们将创建一个agent实例,然后我们将使用它来创建一个映像,将其用作自动缩放组的模板。
前往 AWS Console -> EC2 -> Instances -> 单击 “Launch Instances” 并输入以下内容:
通过单击实例列表中的 incredibuild-coordinator 实例获取 coordinator 内部 IP。
等待agent实例状态变为 “Running”,然后连接到agent实例并运行以下命令:
在环境变量中设置 coordinator 内部 IP(将 “IP” 替换为 coordinator 的实际内部 IP):
COORDINATOR_INTERNAL_IP=IP
安装 Incredibuild coordinator 时,需要从 Incredibuild 获取 Incredibuild 安装二进制文件的链接。获得该链接后,输入以下命令(将 url 替换为下载 url)
wget -Oincredibuild.ubin URL
输入以下命令安装agent:
sudo bash ./incredibuild.ubin install -i -H -O $COORDINATOR_INTERNAL_IP -A /etc/Incredibuild
安装参数说明:
您现在应该能够在 coordinator 网页用户界面 -> Coordinator Monitor 中看到此agent:
现在agent实例已准备就绪,我们可以创建一个映像和自动缩放组,以根据需要动态创建/终止多个agent。
右键单击 ‘incredibuild-agent’ 实例并单击 “Stop instance” 来停止agent实例。停止后,再次右键单击实例并单击 “Image and templates” -> “Create Image”。对于 “Image name”,输入 ‘incredibuild-agent’ 并单击 “Create Image”
等待映像在 EC2 -> Images -> AMIs 上可用。
映像可用后,您可以在实例列表中右键单击 ‘incredibuild-agent’ 并单击 “Terminate instance”来终止该实例。
EC2 -> Instances -> Launch Templates.单击 “Create launch template” 并填写以下详细信息:
EC2 -> Instances -> Auto Scaling -> Auto Scaling Groups.单击 “Create an Auto Scaling group” 并填写以下详细信息:
现在您可以前往实例列表,您应该会看到正在创建 3 个 incredibuild-agent 实例。启动后,您可以登录到 incredibuild-coordinator 网页用户界面并在 “Coordinator Monitor” 选项卡下查看它们。
现在一切准备就绪,可以使用我们创建的agent实例构建一个大型项目。我们将构建一个大型 C++ 项目 opencv。
为简单起见,我们将使用 coordinator 服务器来启动构建,但这可以通过不同的专用服务器或您的 CI 系统轻松完成。查看 Incredibuild Linux 文件了解更多详细信息。
将 SSH 应用到 coordinator 服务器并运行以下命令:
安装构建 opencv 所需的构建依赖项:
sudo apt-get update &&\
sudo apt-get install -y python3-dev libiberty-dev cmake
克隆 opencv GitHub 仓库并准备运行构建:
cd ~
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
运行构建:
cd ~/opencv/build
cmake ..
ib_console make -j 20
在构建时,登录到 coordinator 网页用户界面并在 “Coordinator Monitor” 选项卡下检查agent中的 CPU 负载。您可以在 “Build History” 下跟踪构建进度和任务,就像我们之前创建的示例构建一样。
完成构建后,您可以通过编辑自动缩放组并将期望值设置为 “0” 来终止agent实例:
EC2 -> Auto Scaling -> Auto Scaling Groups -> 单击 “Incredibuild agent” 组 -> 单击组详细信息标题旁边的 “edit” 按钮并设置以下内容:
您现在可以在 EC2 Instances 列表中看到正在终止的实例。它们被终止后,您还可以在 coordinator 监视器中看到它们被禁用。
当您需要再次使用 agent 时,可以通过编辑组详细信息并根据需要设置所需容量和最大容量来进行扩展。
在本文中,我们了解了如何设置一个完整的生产就绪动态分配 Incredibuild 系统,您可以开始使用它来提高构建性能。但是我们仍可以做一些改进:
这个难题的另一个重要缺失部分是与 CI 系统的集成。在另一篇文章中,我们介绍了我们刚刚设置的 Incredibuild 环境如何与 GitHub 操作集成,从而允许我们从 GitHub 推送事件启动构建。
在本文中,我们使用了按需 AWS EC2 机器。这需要手动处理资源,在许多情况下,这些资源仅在一定时间内使用,因此用户应处理资源的启动和终止。此外,在云上使用按需机器还有一个成本效益更高的替代方案,即spot实例。在第二部分中,我们将介绍将spot实例与 Incredibuild Cloud 结合使用的优势。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。