警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

建设警察和建设农民指南

本页介绍 ROS 2 团队中两个轮流担任的开发人员角色,即构建警察和构建农民。这两个角色相互关联,但又有细微差别。

建设警察负责监控我们的 持续集成 (CI) 服务器 确保我们的 "夜间 "工作"包装 "职位 不积累新的回归数据。这样,我们就可以在相对稳定的 "CI"(或 "手动")职位 检查新功能或错误修复是否会带来新的回归。

而建设农民则负责确保 运行我们所有 CI 工作的机器 已启动、运行和更新,以便其他开发人员检查他们的拉取请求。

迄今为止,这两项工作都是由同一个人负责的,时间大约为两周,但在这里将它们分开,是为了将来可以由不同的人负责,也是为了区分角色和责任。

本文档主要面向 ROS 2 团队的开发人员,但对其他人也可能有用。

入职

如果你想成为下一个建筑警察或建筑农民,你就应该这样做:

退休

如果您正在结束建设警察或建设农民的任期,您应该这样做:

打造警察

本节假定您已经阅读了 ROS 2 启动文件.

使命

构建 cop 的目标是在构建库中保持作业 "绿色"(成功而无测试失败或警告),并向相关人员报告任何回归。这将减少几个人查看或调查同一构建失败的开销。这样团队中的其他人也不会每晚都收到失败和/或不稳定构建的电子邮件。

建立警察任务

每天早上,构建协管员应检查所有夜间工作和打包工作,并对新的失败或不稳定工作采取行动。由开发人员手动启动的 "ci "作业不属于构建协管员的职责范围,除非所有的 "ci "作业都失败了,这表明有些东西被合并到了默认分支,而默认分支已经被破坏了。下一节将介绍如何分类和处理新的故障。

此外,构建人员应努力跟踪那些已经存在或一天左右无法解决的问题。只有构建人员才能 "关注"(获取 GitHub 通知)这个仓库中的问题,但任何感兴趣的人也可以关注它:

https://github.com/ros2/build_cop/issues

上述存储库还用于跟踪 "构建农民 "的问题。它的目的是让构建人员或构建农场主跟踪长期运行的项目,以便移交给下一个人,这样他们就可以 "提及 "特定问题上的个人,而不会让整个团队收到每个问题的通知。

故障类型

每种故障都可分为几类:

  • 节点故障:

    • 故障似乎是由于机器配置而非代码更改造成的

    • 转给建筑农民

  • 微不足道的失败

    • 衬垫故障

    • 新警告

  • 关键故障:

    • 破坏在 "默认 "分支上的构建

    • 回归(现有测试原本通过,现在却失败了)

    • 新测试失败(从未通过测试)

  • 重要故障:

    • 测试尚未完全覆盖的新功能

    • 增加易损性(新的易损测试或使现有的易损测试更加易损)

新的失败行动

在每种情况下,建设警察都应采取不同的行动:

  • 小故障应由建设警察立即修复:

    • 推上树枝

    • 已在 CI 上测试

    • 合并到默认分支

    • 在 PR 中添加注释,介绍故障并引用修复提交

  • 关键故障:

    • 应在引入失败的 PR 上报告失败,标记提交者和+1 的审稿人。

    • 公关提交者必须在接下来的半天内采取任何行动:

      • 还原更改并将问题记录在案/在 PR 上评论还原的原因

      • 提交补丁修复故障

  • 重要故障:

    • 应通过标记提交者++1 的审稿人,在引入失败的 PR 上报告失败。

    • 提交者必须

      • 同一周解决

      • 将其加入下一次冲刺

小贴士

建设农民

本节假定您已经阅读了 ROS 2 启动文件.

使命

建设农民的任务是保持 建农场 处于健康的最新状态。理想情况下,所有 Jenkins 节点的每个软件包都有相同/最新的版本。这就需要对任何节点进行监控,并在出现问题时及时打补丁。

建设农民任务

  • 监控建筑群(使用 https://groups.google.com/forum/#!forum/ros2-buildfarm 邮件通知的邮件列表)

  • 让出现故障的节点下线,并附上有关问题的描述性信息,尽快对故障进行调查。

    • 将节点下线

      • 登录 ci.ros2.org

      • 点击 Jenkins UI 左栏中的节点(如 osx_slave_mini1)

      • 点击 "标记此节点暂时离线 "按钮(右上角)

    • 调查故障(见下文)

  • 使用 建筑农民报告表

    • 如果同一问题和操作涉及多个节点,请在提交表单前选择表单中的所有相关节点

  • 如果修复尝试失败:

    • 在农场上保持节点离线

    • 更新节点离线的原因

    • 将状态和错误信息写入 日志

    • 在接下来的几天里安排时间深入研究问题

  • 如果要抢救先前脱机的节点:

    • 通过以下方式更新日志的状态表:

      • 删除状态栏中的错误信息

      • 更新旁边的日期

  • 调查结束后,清理机器:关闭所有窗口,隐藏或删除任何本地更改

    • 理由

      • 任何登录机器的人都需要知道没有人在操作它

      • 如果机器重启,则机器需要处于运行状态,而无需进行本地更改

  • 确保安装说明是最新的

  • 利用现有的日志,整理出常见问题或最佳实践,以抢救节点

如何调查故障节点

如果节点构建失败,请查看构建失败的控制台输出:

  • 点击通过电子邮件收到的失败作业链接,或访问 ci.ros2.org,点击失败作业旁边的编号(如 #2345)(红色图标)。

  • 单击左侧栏中的控制台输出

  • 查找故障原因

  • 如果故障不是由于机器配置造成的,请转发至构建 cop

如果您需要访问一台机器:

  • 参见 此电子表格(非公开)用于获取证书 所有不同的 Jenkins 节点:

  • 对于 OSRF 托管的机器,您需要接入 OSRF 网络或使用 VPN 连接。

  • 对于需要 ssh 密钥的机器,请在 玫瑰@osrfoundation.组织 以添加您的公钥。

  • Packet.net 节点(名称中包含 "packet"):

    • 可通过登录 https://packet.net布莱恩的 电子邮件 地址>/<the 通常 公司 密码>;

      • 在我们建立团队账户管理服务器后,这种情况将有所改变。

    • 可使用 Tully 或 Brian 的 ssh 密钥访问。

      • 在我们建立团队账户管理服务器后,这种情况将有所改变。

故障排除

如果节点脱机:

  • 对于使用 VNC 的机器,应首先尝试使用 VNC,因为许多故障可能是由于弹出窗口或所需更新造成的

  • 如果没有任何弹出窗口,而且重新启动 Jenkins 客户端也不能解决问题,那么你就必须开始排除故障了。

  • 查看节点之间的配置差异可能很有用(Java 版本、pip 冻结等)。

  • 对于脱机(如重启)的 Linux 节点,可通过该节点的 Jenkins 网络界面重新连接

其他提示


Windows 机器上的环境变量会在 Jenkins 作业开始时输出(搜索 ==>; 设置).如果要修改 Windows 节点上的环境变量,可能需要重启机器才能将更改反映到作业中。这是由于 Jenkins 从属会话在一定程度上缓存了环境变量。


在 Windows 机器上,Jenkins 从属程序是以系统账户作为服务运行的。该用户的 "主 "目录似乎是 C:\Windows\system32\config\systemprofile.您可以 "成为 "系统用户,通过下载 pxexec:

https://technet.microsoft.com/en-us/sysinternals/pxexec

然后解压压缩包,再以管理员身份打开命令提示符,然后运行 psexec -i -s cmd.exe.

这些都是从这里的几页纸拼凑起来的:

http://blog.thomasvandoren.com/jenkins-windows-slave-with-git.html

和这里:

https://answers.atlassian.com/questions/128324/where-is-the-home-directory-for-the-system-user


路由器经常重启。Mac 机器通常无法正常重新连接到 Jenkins。手动重新连接即可。

资源