ROS Build Farms
ROS Build Farms是支持 ROS 生态系统的重要基础设施,由 Open Robotics 提供和维护。 它们为 ROS 1 和 ROS 2 包提供源代码和二进制包的构建、持续集成、测试和分析。 开源包有两个托管实例:
https://build.ros.org/ 用于 ROS 1 包
https://build.ros2.org/ 用于 ROS 2 包
如果您要使用任何提供的基础设施,请考虑注册 build farm 讨论论坛 以接收通知,例如,有关任何即将发生的更改。
作业和部署
ROS 构建农场执行多项不同的作业。 对于每种作业类型,您都可以找到有关它们的作用和工作方式的详细描述:
发布作业 生成二进制包,例如 deb 包
开发作业 在轮询的基础上在单个存储库中构建和测试 ROS 包
`pull_request 作业`_ 在由 webhook 触发的单个存储库中构建和测试 ROS 包
CI 作业 跨存储库构建和测试 ROS 包,可选择使用来自其他 CI 作业的工件来加快构建速度
文档作业 生成包的 API 文档并从清单中提取信息
杂项作业 执行维护任务并生成信息数据以可视化构建场及其生成的工件的状态
创建和部署
上述作业是在软件包绽放时创建和部署的,即为 ROS 1 或 ROS 2 发布。 一旦绽放成功,并且软件包被纳入 ROS 发行版之一(通过请求到 rosdistro),将生成相应的作业。 作业的名称编码了它们的类型和目的:[1]
发布作业:
{distro}src_{platf}__{package}__{platform}__source
build source packages of releases{distro}bin_{platf}__{package}__{platform}__binary
build binary packages of releases
例如,rclcpp 在 ROS 2 Rolling(运行于 Ubuntu Noble amd64)上的二进制打包作业名为“Rbin_uN64__rclcpp__ubuntu_noble_amd64__binary”。
开发工作:
{distro}dev__{package}__{platform}
perform a CI build for the releasing branch
pull_request jobs
{distro}pr__{package}__{platform}
perform a CI build for a pull request
例如,ROS 2 Rolling(在 Ubuntu Noble amd64 上运行)上 rclcpp 的 PR 作业名为“Rpr__rclcpp__ubuntu_noble_amd64”。
执行
作业的执行取决于作业的类型:
每次根据配置的频率对相应分支轮询进行提交时,都会触发“devel jobs”_。
`pull_request jobs`_ 将由上游 [2] 存储库的相应拉取请求的 webhook 触发
每次发布新的软件包版本时,即接受此软件包的新 rosdistro 拉取请求时,都会触发一次“release jobs”_。源作业由 rosdistro 分发文件中的版本更改触发,二进制作业由其源对应项触发。
常见问题 (FAQ) 和故障排除
我收到了来自失败的构建农场作业的 Jenkins 邮件。我该怎么办?
转到引发问题的作业。您会在 Jenkins 电子邮件顶部找到链接。 按照链接转到构建作业后,单击左侧的 控制台输出,然后单击 完整日志。这将为您提供失败构建的完整控制台输出。尝试找到 最上面的错误,因为它通常是最重要的,其他错误可能是后续错误。
电子邮件底部可能会显示“’apt-src build […]’ 失败。这通常是因为 构建包时出错。’’ 这通常暗示缺少依赖项,请参阅 2。
#。我似乎缺少依赖项,我如何找出哪一个?
您基本上有两个选择,a. 更容易,但可能需要几次迭代,b. 更复杂,并为您提供完整的见解以及本地调试。
a) 检查引发问题的发布作业(参见 1.)并定位 cmake 依赖项 问题。为此,请浏览到 cmake 部分,例如,如果是 Ubuntu/Debian 构建作业,则通过左侧菜单导航到 build binarydeb 部分。CMake 错误 通常会提示 cmake 配置需要的依赖项,但在 `package manifest`_ 中缺失。修复清单中的依赖项后,对包进行新的发布 并等待构建农场的反馈或… b) 要获得完整的见解和更快的本地调试,您可以`在本地运行发布作业`_。 这允许在本地迭代清单,直到所有依赖项都得到修复。
#。为什么当开发作业/我的 github 操作/我的本地构建成功时,发布作业会失败?
这有几个可能的原因。 首先,发布作业针对最小 ROS 安装进行构建,以检查是否在`package manifest`_ 中正确声明了所有依赖项。开发作业/github 操作/本地构建可能 在已安装依赖项的环境中执行,因此不会 注意到依赖项问题。其次,它们可能会构建不同版本的源代码。 虽然开发作业/github 操作/本地构建通常从 上游 [2] 存储库构建最新版本,但`发布作业`_ 构建最新版本的源代码,即 发布 存储库 [3] 相应*上游*分支中的源代码。
进一步阅读
以下链接提供了有关构建农场的更多详细信息和见解:
https://github.com/ros-infrastructure/ros_buildfarm/blob/master/doc/index.rst - 构建农场基础设施和生成的构建作业的一般文档
http://wiki.ros.org/regression_tests#Setting_up_Your_Computer_for_Prerelease
http://wiki.ros.org/buildfarm - ROS 1 构建农场的 ROS wiki 条目(部分*已过时*)
https://github.com/ros-infrastructure/cookbook-ros-buildfarm - 安装和配置 ROS 构建农场机器