ROS构建农场

ROS构建农场是支持ROS生态系统的重要基础设施,由 Open Robotics 提供和维护。它们为ROS 1和ROS 2软件包提供源代码和二进制软件包的构建、持续集成、测试和分析。开源软件包有两个托管实例:

  1. https://build.ros.org/ 用于ROS 1软件包

  2. https://build.ros2.org/ 用于ROS 2软件包

如果您打算使用提供的基础设施,请考虑注册`构建农场讨论论坛 <http://discourse.ros.org/c/buildfarm>`__ 以便接收通知,例如有关任何即将到来的更改的通知。

作业和部署

ROS构建农场执行几种不同的作业。对于每种作业类型,您将找到有关它们的详细说明以及它们的工作原理:

  • release jobs 生成二进制软件包,例如 Debian 软件包

  • devel jobs 在轮询基础上构建和测试 ROS 软件包的单个存储库

  • pull_request jobs 通过 Webhooks 触发在单个存储库中构建和测试 ROS 软件包

  • CI jobs 跨存储库构建和测试 ROS 软件包,可选择使用其他 CI 作业的工件加快构建速度

  • doc jobs」_ 生成软件包的 API 文档,并从清单中提取信息

  • miscellaneous jobs」_ 执行维护任务,并生成信息数据以可视化构建平台的状态及其生成的构件

创建和部署

上述工作是在软件包「开花」时创建和部署的,即发布到 ROS 1 或 ROS 2。一旦开花成功,并且软件包被纳入 ROS 发行版之一(通过对 rosdistro 提交拉取请求),相应的工作将会被创建。工作的名称编码了它们的类型和目的:1

  • 发布任务:

    • {distro}src_{platf}__{package}__{platform}__source 构建发布的源代码包

    • {distro}bin_{platf}__{package}__{platform}__binary 构建发布的二进制包

    例如,ROS 2 Iron 上 rclcpp 的二进制打包任务(在 Ubuntu Jammy amd64 上运行)被命名为 Ibin_uJ64__rclcpp__ubuntu_jammy_amd64__binary

  • 开发任务:

    • {distro}dev__{package}__{platform} 在发布分支上执行 CI 构建

  • 拉取请求任务:

    • {distro}pr__{package}__{platform} 在拉取请求上执行 CI 构建

    例如,对于在Ubuntu Jammy amd64上运行的ROS 2 Iron上的rclcpp的PR工作,其名称为``Ipr__rclcpp__ubuntu_jammy_amd64``。

执行

作业的执行取决于作业的类型:

  • devel jobs 将根据配置的频率,每次对相应分支进行提交时触发轮询。

  • pull_request jobs 将由上游 2 仓库的相应拉取请求的 Webhook 触发

  • release jobs 将在每次发布新软件包版本时触发,即每次此软件包的新 rosdistro 拉取请求被接受时。源码作业是由 rosdistro 分发文件中的版本更改触发的,而二进制作业是由其源码作业的对应部分触发的。

常见问题解答 (FAQ) 和故障排除

  1. 我收到来自构建工作失败的 Jenkins 邮件。我该怎么办?

    转到引发问题的作业。您可以在Jenkins电子邮件的顶部找到链接。一旦您点击链接进入构建作业,点击左侧的*Console Output*,然后点击*Full Log*。这将给您提供失败构建的完整控制台输出。尝试找到最顶部的错误,因为通常它是最重要的,其他错误可能是后续错误。

    电子邮件底部可能会显示``'apt-src build [...]' failed. This is usually because of an error building the package.``这通常暗示缺少依赖项,请参阅2。

  2. 我似乎缺少一个依赖项,我该如何找出是哪个依赖项?

    基本上有两种选择,a. 更简单,但可能需要多次迭代,b. 更详细,并且可以提供完整的了解以及本地调试。

    1. 检查引发问题的发布任务(参见 1.)并定位 cmake 依赖问题。为此,请浏览到 cmake 部分,例如,在 Ubuntu/Debian 构建任务中通过左侧菜单导航到“build binarydeb”部分。通常,CMake Error 会提示 cmake 配置所需的依赖项,在 package manifest 中缺失。修复 manifest 中的依赖项后,重新发布软件包并等待构建服务器的反馈或...

    2. 为了获得完整的了解和更快的本地调试,您可以在本地运行发布任务(run the release jobs locally)。这样可以在本地迭代 manifest,直到所有依赖项都被修复。

  3. 为什么发布任务失败,而开发任务 / 我的 GitHub Actions / 我的本地构建成功?

    这可能有几个潜在原因。首先,发布任务使用最小的 ROS 安装进行构建,以检查所有依赖项是否在 package manifest 中正确声明。开发任务 / GitHub Actions / 本地构建可能在已安装了依赖项的环境中执行,因此不会注意到依赖关系问题。其次,它们可能构建不同版本的源代码。而开发任务 / GitHub Actions / 本地构建通常构建来自 upstream 2 存储库的最新版本,release jobs 则构建最新发布的源代码,即在 release 存储库 3 的相应 upstream 分支中的源代码。

进一步阅读

以下链接提供更多关于构建农场的细节和见解:

1

{distro} 是ROS发行版的首字母,{platform}``(``{platf})表示软件包构建的平台(及其简短代码),{package} 是正在构建的ROS软件包的名称。

2(1,2)

“上游”存储库是包含相应ROS 1 / ROS 2软件包原始源代码的存储库。

3

release”仓库是ROS 2基础设施用于发布软件包的仓库,详情请参阅 https://github.com/ros2-gbp/