跳转至

OpenCloudOS CI门禁问题排查手册

门禁管理员:nilusyi、cunshunxia、wynnfeng、zoedong

1. 门禁流程简介

0

相关指导文档:

  • OpenCloudOS 社区版本贡献指南: https://docs.opencloudos.org/contribution/how-to-contribute-oc/
  • 软件包管理原则:https://docs.opencloudos.org/contribution/software-package-management-principles/
  • 软件包打包指导:https://docs.opencloudos.org/contribution/software-packaging-guide/

2. 门禁常用操作

2.1 门禁支持命令列表

门禁支持在pull request页面输入对应命令,触发门禁不同功能,具体命令如下:

类型 命令
pull request /retest 触发门禁测试
/check-pass 强制通过门禁检查,需权限检查
/approve 同意 pull request 并合并,需权限检查
/help 显示帮助信息

2.2 重试

门禁测试正常由PR触发,后续如果由新commit推送,会自动触发重试 如果需要手动重新执行门禁测试,请评论/retest

1

3. 门禁检查项以及问题排查

3.1 检查项介绍

测试项名称 子测试项 主要检查内容 SUCCESS WARNING FAILED
source 获取source文件中的源码包 成功 / 从文件服务器获取源码包失败
srpmbuild 生成source rpm包 成功 / 制作srpm包失败
rpmbuild rpm编译 成功 / 编译失败
install 安装测试 成功 / 安装失败
compatibility subrpmlist 子包数量变化 无变化 子包增加 子包减少
filelist 包含文件列表变化 无变化 包文件发生增加 包文件发生减少
ability 包提供的requires/provides等能力变化 无变化 REQUIRES/CONFLICTS/OBSOLETES/RECOMMENDS变化、PROVIDES增加 PROVIDES减少
abi ABI差异 无变化 / 软件包ABI发生变化并且影响ABI兼容性
api API差异 无变化 / 软件包API发生变化并且影响API兼容性
executable 可执行文件执行输出差异 无变化 / 包中可执行文件运行输出发生变化
conf 配置文件配置项差异 无变化 其余配置文件发生变化 宏、系统关键路径配置文件变化

3.2 问题排查方式

3.2.1 source失败

rpm仓库的源码包存放在文件服务器中,通过在仓库中的sources文件中配置文件名和HASH值确定。

SHA512 (systemd-253.tar.gz) = 3bbc431a292ab590b70d3b490a528f71d30ccf478ddfa66d1c210f40c260ef49ac30651c19f2d073acf38d68398a4a6fbf95391f0e3ea0333d94b9d4e81d514f

如果该步骤失败,需要确认以下情况

  • 是否已将源码文件上传到文件服务器中
  • sources文件中是否配置了正确的文件名和SHA512值

如果排除上述问题后,该项仍然失败,请联系门禁管理员。

3.2.2 srpmbuild检查失败

source rpm制作是编译的前序步骤,可以通过本地执行进行问题排查。 srpm包制作流程参考以下命令:

rpmdev-setuptools
cd your-project
cp *spec ~/rpmbuild/SPECS/
cp * ~/rpmbuild/SOURCES/
rpmbuild -bs ~/rpmbuild/SPECS/your-project.spec

3.2.3 rpmbuild失败

该步骤为使用上一步骤生成的srpm包提交给koji执行编译任务。 如果该步骤失败,可以点击下图中的链接进入koji任务查看

2

3.2.4 install失败

该步骤会将编译出来的rpm包进行dnf安装测试,如果该步骤失败,通过以下步骤查找日志:

  • 点击install检查的详情链接

3

3.2.5 compatibility失败

该项检查目前主要分为七个子检查,主要检查当前提交的版本与上一个版本之间的兼容性差异。 每一个子检查都对应具体的详细日志的链接,如下图红框:

3

3.2.5.1 subrpmlist失败

如果subrpmlist失败,说明相比于上一个版本,该次提交的版本造成了子包的增加或者删除,在rpmlist日志中会找到如下日志

[2023-11-02T09:32:27.781Z] 旧包的包列表:4, 详情:['mockito-3.12.4-4.ocs23.noarch.rpm', 'mockito-inline-3.12.4-4.ocs23.noarch.rpm', 'mockito-3.12.4-4.ocs23.src.rpm', 'mockito-javadoc-3.12.4-4.ocs23.noarch.rpm']
[2023-11-02T09:32:27.781Z] 新包的包列表:5, 详情:['mockito-javadoc-3.12.4-5.ocs23.noarch.rpm', 'mockito-inline-3.12.4-5.ocs23.noarch.rpm', 'mockito-3.12.4-5.ocs23.noarch.rpm', 'mockito-3.12.4-5.ocs23.src.rpm', 'mockito-junit-jupiter-3.12.4-5.ocs23.noarch.rpm']
[2023-11-02T09:32:27.781Z] 2023-11-02 17:32:27,757 - ERROR - mockito - check_subrpmlist failed
子包数量通常是由spec文件指定,可以通过检查spec文件中的packages字段来排查,例如
%package libs

3.2.5.2 filelist失败

该项检查如果失败,说明相同rpm包中打包的文件发生了变化,在filelist_rpmdiff日志中会找到如下日志

7

可以搜索list files are in字段匹配到具体日志。 打包的文件通常是由spec文件中的files字段指定,例如

%files devel

例如: https://gitee.com/opencloudos-stream/mockito/pulls/1

3.2.5.3 ability失败

该项检查如果告警或者失败,说明相比于上一个版本,该rpm包所提供的能力发生了变化,在ability_rpmdiff日志中会找到如下日志

8

可以搜索list requires/provides are in字段匹配到具体日志 也可以本地通过rpm -qR 或者rpm -qP命令检查确认

3.2.5.4 abi失败

该项检查如果失败,说明rpm包中的动态库发生了兼容性变化,在summary日志中会找到如下日志,打印了ABI变化的的动态库以及变化比例,Binary compatibility不为100%即认为ABI不兼容。

[2023-11-06T03:55:18.047Z] Preparing, please wait ...
[2023-11-06T03:55:18.047Z] Comparing ABIs ...
[2023-11-06T03:55:18.047Z] Comparing APIs ...
[2023-11-06T03:55:18.047Z] Creating compatibility report ...
[2023-11-06T03:55:18.047Z] Binary compatibility: 75%
[2023-11-06T03:55:18.047Z] Source compatibility: 100%
[2023-11-06T03:55:18.047Z] Total binary compatibility problems: 1, warnings: 0
[2023-11-06T03:55:18.047Z] Total source compatibility problems: 0, warnings: 0
[2023-11-06T03:55:18.047Z] Report: compat_reports/filter-aaaa.so/9.18.18-2.ocs23_to_9.18.18-3.ocs23/compat_report.xml
[2023-11-06T03:55:18.047Z] ======================================== bind-9.18.18-2.ocs23.x86_64.rpm ========================================
动态库名filter-aaaa.so在路径中可以看到,最后分割线中的为所属的rpm包名。 然后在abidiff日志中会打印出具体的变化内容:
  Libs:
   - filter-aaaa.so
  Symbols: 4
  Types: 17
  Verdict: incompatible
  Affected: 25
​
Problems with severity 'Medium':
  Header: result.h
  Type: enum isc_result, Problem: Enum_Member_Value, Change: Value of member ISC_R_NRESULTS has been changed from 250 to 251.
​
Problems with severity 'Safe':
  Header: result.h
  Type: enum isc_result, Problem: Added_Enum_Member, Change: The member ISCCC_R_MAXDEPTH with value 250 has been added.
如果对该项检查有疑问,请联系门禁管理员。

3.2.5.5 api失败

该项检查如果失败,说明该版本相比于上一个版本,API接口发生了变化,在summary日志中有与ABI检查一样的打印,不同的是,在对动态库的检查中Source compatibility不为100%,而不是Binary compatibility

Source compatibility: 97.8%
如果是python的API变化,需要进入具体的流水线日志查看,进入链接后进入下图位置:

6

如果出现以下日志,表示python文件中变更的接口在依赖该包的rpm包中发现被使用:

[WARNING]  Function django.utils.crypto.get_random_string found in RPM package: python3-django-debreach, file: /tmp/tmpv5x41alc/python3-django-debreach/usr/lib/python3.11/site-packages/debreach/middleware.py

详细的变化会以表格形式打印出

  • [Class]前缀表示类
  • @前缀表示有装饰器装饰的函数
  • *前缀表示变量
+------------------------------------------------------------------------+-------------------------------------+-------------------+------------------------------------------+
| File                                                                   | Added Symbols                       | Removed Symbols   | Changed Symbols                          |
+------------------------------------------------------------------------+-------------------------------------+-------------------+------------------------------------------+
| usr/lib/python_[pyversion]/site-packages/oslo_concurrency/lockutils.py | AcquireLockFailedException.__str__  | *ReaderWriterLock | internal_lock(2 -> 3) severity:Low       |
|                                                                        | ReaderWriterLock.__init__           |                   | contextmanager@lock(8 -> 9) severity:Low |
|                                                                        | AcquireLockFailedException.__init__ |                   | synchronized(7 -> 8) severity:Low        |
|                                                                        | [Class] ReaderWriterLock            |                   |                                          |
|                                                                        | [Class] AcquireLockFailedException  |                   |                                          |
+------------------------------------------------------------------------+-------------------------------------+-------------------+------------------------------------------+
3.2.5.6 executable失败

该项检查如果失败,说明该版本中的可执行文件,相比于上一个版本,执行--help/-h/-v命令输出发生了变化

3.2.5.7 conf失败

该项检查如果失败,说明该版本中的配置文件相比于上一个版本发生了变化,配置文件类型主要包括以下:

  • .conf后缀文件
  • .yaml后缀文件
  • .xml后缀文件
  • .json后缀文件
  • macros.开头文件
  • /etc/、/usr/lib/systemd/目录下文件

[arch]_conf日志中会出现以下日志

Configuration file differences for XXX.conf
然后会打印出来具体差异内容,下面说明日志对应的含义

  • 以下日志说明配置项 {key} 被删除

    {key} is missing in the second file
    
  • 以下日志说明配置项 {key} 的值变更,由XXX变为YYY

    {key} has different values: XXX != YYY
    
  • 以下日志说明 {key} 为新增配置项

    {key} is missing in the first file
    

例如: https://gitee.com/opencloudos-stream/xbean/pulls/1

4. 重编测试

部分包、库如果发生兼容性变化,会通过重编依赖他们的包的方式检查。 出现下列情况时会触发重编测试:

  • 包提供能力(provides)删除
  • 包ABI发生变化
  • 包API发生变化
  • 可执行文件输出发生变化(--help/-h/-v)
  • 宏文件发生变化

如果包因为ABI变化需要正式重编,CI流水线会创建对应的issue来通知以及跟踪。

5. 其余常见问题

待补充