警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
建设警察和建设农民指南
本页介绍 ROS 2 团队中两个轮流担任的开发人员角色,即构建警察和构建农民。这两个角色相互关联,但又有细微差别。
建设警察负责监控我们的 持续集成 (CI) 服务器 确保我们的 "夜间 "工作 和 "包装 "职位 不积累新的回归数据。这样,我们就可以在相对稳定的 "CI"(或 "手动")职位 检查新功能或错误修复是否会带来新的回归。
而建设农民则负责确保 运行我们所有 CI 工作的机器 已启动、运行和更新,以便其他开发人员检查他们的拉取请求。
迄今为止,这两项工作都是由同一个人负责的,时间大约为两周,但在这里将它们分开,是为了将来可以由不同的人负责,也是为了区分角色和责任。
本文档主要面向 ROS 2 团队的开发人员,但对其他人也可能有用。
入职
如果你想成为下一个建筑警察或建筑农民,你就应该这样做:
确保您已订阅该邮件列表,并已打开 "发送每封邮件 "选项:
确保您正在 "关注 "此 GitHub 仓库:
与前任建筑警察和/或建筑农民讨论持续存在的问题
将 Jenkins 上主视图的描述更新为当前日期和您的姓名:
退休
如果您正在结束建设警察或建设农民的任期,您应该这样做:
取消订阅或改用 "摘要 "发送此邮件:
"解除对 GitHub 仓库的监控:
总结下一任建设警察或建设农场主的持续问题,并将其移交给他们
打造警察
本节假定您已经阅读了 ROS 2 启动文件.
使命
构建 cop 的目标是在构建库中保持作业 "绿色"(成功而无测试失败或警告),并向相关人员报告任何回归。这将减少几个人查看或调查同一构建失败的开销。这样团队中的其他人也不会每晚都收到失败和/或不稳定构建的电子邮件。
建立警察任务
每天早上,构建协管员应检查所有夜间工作和打包工作,并对新的失败或不稳定工作采取行动。由开发人员手动启动的 "ci "作业不属于构建协管员的职责范围,除非所有的 "ci "作业都失败了,这表明有些东西被合并到了默认分支,而默认分支已经被破坏了。下一节将介绍如何分类和处理新的故障。
此外,构建人员应努力跟踪那些已经存在或一天左右无法解决的问题。只有构建人员才能 "关注"(获取 GitHub 通知)这个仓库中的问题,但任何感兴趣的人也可以关注它:
https://github.com/ros2/build_cop/issues
上述存储库还用于跟踪 "构建农民 "的问题。它的目的是让构建人员或构建农场主跟踪长期运行的项目,以便移交给下一个人,这样他们就可以 "提及 "特定问题上的个人,而不会让整个团队收到每个问题的通知。
故障类型
每种故障都可分为几类:
节点故障:
故障似乎是由于机器配置而非代码更改造成的
转给建筑农民
微不足道的失败
衬垫故障
新警告
关键故障:
破坏在 "默认 "分支上的构建
回归(现有测试原本通过,现在却失败了)
新测试失败(从未通过测试)
重要故障:
测试尚未完全覆盖的新功能
增加易损性(新的易损测试或使现有的易损测试更加易损)
新的失败行动
在每种情况下,建设警察都应采取不同的行动:
小故障应由建设警察立即修复:
推上树枝
已在 CI 上测试
合并到默认分支
在 PR 中添加注释,介绍故障并引用修复提交
关键故障:
应在引入失败的 PR 上报告失败,标记提交者和+1 的审稿人。
公关提交者必须在接下来的半天内采取任何行动:
还原更改并将问题记录在案/在 PR 上评论还原的原因
提交补丁修复故障
重要故障:
应通过标记提交者++1 的审稿人,在引入失败的 PR 上报告失败。
提交者必须
同一周解决
将其加入下一次冲刺
小贴士
您可以搜索在两个日期之间合并的 PR,例如
要获取更改代码的准确列表,可在
vcs 出口 --精确
两次构建之间。这对 Fast RTPS 等外部仓库尤其有用,因为在这些仓库中,旧提交可能会在一夜之间被推送到主干分支,很难在 GitHub UI 中发现。
Jenkins 作业顶部显示的时间为 UTC 时间。您可以使用以下方法转换时间,例如
如果在一夜之间出现烧结机故障,通常是因为烧结机出现了新版本。
创建最后一个
核心 冷冻
的输出,以查看哪些版本发生了变化。如果是依赖关系中的回归,您可以暂时固定旧版本,请参阅 此 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。手动重新连接即可。