openEuler Jenkins问题排查手册:常见门禁错误及解决方案
【免费下载链接】openeuler-jenkinsThis repository is used to store the jenkins scripts in openEuler community.项目地址: https://gitcode.com/openeuler/openeuler-jenkins
前往项目官网免费下载:https://ar.openeuler.org/ar/
openEuler社区使用Jenkins门禁系统来确保代码提交质量,当开发者在Gitee提交PR时,系统会自动触发编码规范检查、构建、安装和接口变更等多项检查。这本完整指南将帮助您快速定位和解决门禁检查中遇到的常见问题,让您的开发流程更加顺畅高效。🚀
门禁系统简介与工作流程
openEuler Jenkins门禁系统是开源社区代码质量保障的重要工具,它会在每次PR提交时自动执行一系列检查。门禁检查主要包括两个阶段:静态检查阶段和构建测试阶段。
如上图所示,门禁可以通过首次提交PR或评论/retest来触发。当门禁开始运行时,会在PR评论中显示类似下图的状态:
门禁检查完成后,会显示详细的检查结果,包括基本检查项和接口变更检查:
门禁常见问题快速定位
PR触发无响应问题
问题现象:PR中没有显示任何门禁信息,也没有ci_processing标签。
解决方案:首先确认该软件包是否是新增的包。如果是新增的包,需要检查门禁系统中是否存在对应的门禁工程。您可以通过访问门禁入口链接来查询。如果没有找到对应的门禁工程,请联系门禁接口人处理。
问题现象:PR中已打上ci_processing标签,但长时间没有门禁结果回显。
解决方案:这种情况说明门禁工程正在运行中。您可以根据门禁入口链接分别进入trigger、x86-64、aarch64、comment工程查看运行状态:
- 进度条蓝色并刷新:门禁正常运行中,请耐心等待
- 进度条变红:可能执行时间过长或出现卡死,请联系门禁接口人
- 等待资源分配:长时间未分配到资源,请联系基础设施接口人
- 仓库已有PR正在构建:同一仓库的门禁任务是串行执行的,请等待当前任务完成
静态检查失败问题
Git Fetch失败
错误信息:git fetch failed, 128
解决方案:该PR代码存在冲突未解决。请解决代码冲突后重试门禁检查。
SPEC文件编写不规范
版本号未更新错误:current version: 5.15.0-r3, last version: 5.15.0-r3
解决方案:每次PR提交时,spec文件中的version号或release号必须更新。具体要求是:版本号不变时,release号必须递增;版本号变化时,release必须置为1。
Patch字段位置错误:AttributeError: 'Package' object has no attribute 'patches'
解决方案:spec文件中的patch字段位置错误,不应该写在%package devel下面,而应该写在Source部分。
二进制文件检查失败
错误信息:binary file of type exists: /llvm-11.0.0.src/test/tools/obj2yaml/XCOFF/Inputs: ['aix_xcoff_truncated_file_header.o', 'aix_xcoff.o']
解决方案:本次PR提交中存在二进制文件。openEuler社区要求不存在以.pyc、.jar、.ko、.o为后缀的文件(包括压缩包内,但不包括以链接形式给出的上游社区)。
编译阶段常见问题
缺少二进制包错误
错误信息:Error: Failed to retrieve plexus-archiver-3.6.0-3.oe1.noarch.rpm from the following locations
解决方案:缺少二进制包,请联系OBS接口人归档。请注意,OBS的二进制仓库是工程用来依赖构建的,每天晚上9点会对编译好的包进行归档。
缺少依赖包错误
错误信息:nothing provides llvm-devel = 12.0.1 nothing provides llvm-static = 12.0.1
解决方案:根据PR合入的分支,在对应的OBS分支上查找是否存在缺少的依赖包。您可以通过查看包的Provides和Requires信息来确认依赖关系:
Changelog中存在非法字段
错误信息:error: line 53: second %install
解决方案:spec文件的changelog部分包含了%build和%install等字符串,导致编译过程中被错误识别。请检查并修正changelog格式。
安装检查阶段问题
安装过程中缺少依赖包
错误信息:conflicting requests nothing provides libperl.so.5.34()(64bit) needed by perl-version-8:0.99.29-1.oe1.x86_64
解决方案:安装过程中缺少perl相关的依赖包。请在对应的repo源中查找是否存在该依赖包,如果确实不存在,请联系OBS接口人。
安装过程中组件冲突
错误信息:file /usr/bin conflicts between attempted installs of OpenCSD-1.3.3-1.oe1.aarch64 and filesystem-3.16-5.oe1.aarch64
解决方案:本次编译出来的包组件与filesystem组件有冲突,提供了相同的/usr/bin和/usr/lib64组件。需要开发者自行修改,如果需要依赖该组件,可在spec中将对应的包加入安装依赖。
ABI变更检查问题
提交导致ABI变更
错误信息:rpm_abi FAILED header FAILED
解决方案:查看软件包兼容等级,并按指引确认能否接受ABI变更。如果能接受就可以合入,不能接受可以尝试将ABI改为static的。
升级导致ABI变更
解决方案:升级导致的ABI变更,需要在评论中对ABI差异做分析说明,解释变更的原因和影响范围。
实用工具与资源
获取门禁编译的包
您可以通过以下路径获取门禁本次PR编译出的包:http://121.36.53.23/src-openeuler/{branch}/{giteeId}/{repo}/{arch}/{prid}
例如:http://121.36.53.23/src-openeuler/openEuler-22.03-LTS-SP1/xiexiuqi/kernel/x86_64/884
门禁检查项对应代码位置
了解门禁检查项对应的代码位置有助于深入理解问题根源:
| 检查项 | 主要代码位置 |
|---|---|
| check_binary_file | check_binary_file.py |
| check_package_license | check_license.py |
| check_package_yaml_file | check_yaml.py |
| check_spec_file | check_spec.py |
| check_consistency | check_consistency.py |
门禁配置管理
门禁支持部分检查项的选择性配置,配置文件位于ac.yaml。负责检查项PR回显的代码位于gitee_comment.py。
问题反馈与沟通渠道
门禁责任田划分
遇到问题时,可以根据问题类型联系相应的负责人:
| 责任领域 | 联系人 |
|---|---|
| 门禁总接口人 | 王欢 |
| 基础设施维护 | 曹志、赵春江、刘奇 |
| OBS工程维护 | 王冲、杨超豪、董杰 |
| 软件包单仓门禁维护 | 王欢、陈一雄 |
误报反馈机制
如果对门禁结果有疑问或认为门禁结果不准确,可以通过PR评论反馈误报情况:
- 标记误报:
/ci_mistake build_no <mistake_type> <ci_mistake_stage> - 撤回标记:
/ci_unmistake build_no
其中build_no指的是trigger工程的构建号,mistake_type可以是ci、obs、infra,ci_mistake_stage可以是具体的检查项名称。
最佳实践与预防措施
1. SPEC文件编写规范
- 确保版本号和release号正确更新
- Patch字段位置正确
- Changelog格式规范,避免包含特殊标记
2. 依赖管理
- 提前在OBS上检查依赖包是否存在
- 确保所有依赖包都能在构建环境中访问
- 避免引入外部网络依赖
3. 二进制文件处理
- 避免提交二进制文件到代码仓库
- 使用上游社区的链接而不是直接包含二进制文件
- 压缩包内的二进制文件也需要检查
4. 分支管理
- 确认分支是否仍在维护期
- 检查分支映射关系是否正确配置
- 及时更新分支维护状态
总结
openEuler Jenkins门禁系统是保障代码质量的重要工具,虽然偶尔会遇到各种问题,但通过本文提供的排查指南,您可以快速定位和解决大部分常见问题。记住关键的联系人和沟通渠道,善用误报反馈机制,您的开发体验将更加顺畅。💪
如果您遇到本文未覆盖的问题,或者有改进建议,欢迎在openeuler-jenkins仓库提交Issue,社区将及时响应和处理。
【免费下载链接】openeuler-jenkinsThis repository is used to store the jenkins scripts in openEuler community.项目地址: https://gitcode.com/openeuler/openeuler-jenkins
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考