构建 rpm 包流程⚓︎
总体流程⚓︎
- 基于 PR,在 oepkgs-mangement 仓库中创建配置文件,用于建仓
- 往步骤一生成的 https://gitee.com/src-oepkgs/ 仓库中补充构建所需源码文件
- 仓库的 webhook 将自动触发构建任务
基于 PR,创建仓库⚓︎
在 oepkgs-management,填写两个配置文件,PR 合入之后,创仓机器人 ci-robot 会在 [src-oepkgs](https://gitee.com/src-oepkgs)下面自动创建仓库。
说明:
- OEPKGS 仓库将软件包按照领域、类别划分,不同领域及类别的软件包由 不同的 sig 组 进行维护
oepkgs-management 仓库中的两个配置文件(以 nginx 为例):
# 在 oepkgs-management 仓库 sig 目录下面创建虚拟化领域的 sig 组
# 创建 oepkgs-management/sig/virtual/sig-info.YAML 文件
oepkgs-management/sig/virtual/sig-info.YAML:
# sig 组名称,一般跟软件包领域相关
name: virtual
description: "To support the field of virtual"
mailing_list: NA
meeting_url: NA
mature_level: startup
# sig 组的管理者
maintainers:
- gitee_id: lipingEmmaSiguyi
name: Ping Li
orgnization: Huawei
email: liping136@huawei.com
# 该 sig 组管理的仓库
repositories:
- repo:
- src-oepkgs/nginx
committers:
- gitee_id: lipingEmmaSiguyi
name: Ping Li
email: liping136@huawei.com
说明:
- 开源软件引入 OEPKGS 已有 sig 组,提交申请创仓 PR,可基于对应 sig 组的 sig-info.YAML 文件进行修改,不强制要求开源软件引入 OEPKGS 仓,需要新建 sig 组
sig-info.YAML 字段解释:
字段 | 解释 | 是否必填 |
---|---|---|
name | sig 组名称,一般跟软件包领域相关 | √ |
description | 对该 sig 的描述 | √ |
mailing_list | sig 组的订阅邮箱地址 | × |
meeting_url | sig 组会议链接 | × |
maintainers | sig 组的管理者,负责该 sig 组下源码仓 pr 的检视与合入 | √ |
repositories | sig 组下面的源码仓 | √ |
committers | sig 组下面某些源码仓的 committers,负责对应仓库 PR 的检视与合入 | √ |
# 在 oepkgs-management/sig/virtual 下面创建 src-oepkgs/仓库名称首字母/仓库名称。YAML
# ci-robot 将依据这个文件进行自动建仓
oepkgs-management/sig/virtual/src-oepkgs/n/nginx.YAML:
# 仓库名称
name: nginx
description: "nginx is a generic and open source processor emulator which achieves a good emulation speed by using dynamic translation"
# 上游仓库地址
upstream: https://GitHub.com/nginx/nginx.Git
# 仓库分支
branches:
- name: master
type: protected
- name: openEuler-20.03-LTS-SP3
type: protected
create_from: master
- name: openEuler-22.03-LTS
type: protected
create_from: master
type: public
仓库配置文件字段解释:
字段 | 解释 | 是否必填 |
---|---|---|
name | 包名(源码仓名) | √ |
description | 对软件包的描述 | √ |
upstream | 软件包上游仓库地址 | √ |
branches | 仓库分支,OEPKGS 镜像源分支管理详见:OEPKGS 分支管理文档 | √ |
补充源码文件⚓︎
完成步骤一之后,5 分钟内会生成 https://gitee.com/src-oepkgs/nginx 仓库,通过 PR 往这个仓库中补充源码文件:
分别是可用于支撑生成 rpm 包的 nginx.spec 文件、软件包源码包 nginx-2.12.0.tar.bz2,详见:https://gitee.com/src-oepkgs/nginx
提了 PR 之后,在 5~30 分钟时间内,会进行 PR 门禁构建测试,PR 会评论出 PR 构建结果,建议在 Build_Result 显示为 SUCCESS 之后合入 PR
前面配置文件 oepkgs-management/sig/virtual/sig-info.YAML 中指定的 maintanier,可通过在 PR 下面评论/lgtm 及/approve 合入 PR
PR 合入之后会在合入的 commit 下面给出构建测试结果,以及安装测试结果,以及软件包上传到目标内部测试仓库 testing_repo 中,如果测试结果成功,第二天会更新至 oepkgs_reop 中(注:OEPKGS 仓库每日零点定时更新,测试结果中只是给出预计要存放的 OEPKGS 仓库地址):
接下来的动作都是基于 compass-ci 构建系统自动完成,属于原理解析,无需用户操作,但如果你想更加清楚的了解软件包构建进展,可继续阅读。
基于 webhook,自动触发构建任务原理⚓︎
- 仓库的 webhook 将自动触发提交构建任务
- 查看日志判断是否构建成功
- 构建成功则会自动进行安装测试,若成功则入库
- 构建/安装测试失败则查看日志分析原因并进行修复
webhook 自动提交构建 rpm 包构建任务⚓︎
submit rpmbuild.YAML (rpmbuild.YAML 是包构建任务的配置参数文件)
# 测试用例名称
suite: rpmbuild
# 测试用例~/lkp-test/tests/rpmbuild
rpmbuild:
# 远程仓库源码包地址
upstream_repo: https://gitee.com/src-oepkgs/nginx
# 构建后的包仓库位置,都将放置在 contrib/$sig 仓库中
custom_repo_name: contrib/virtual
# 测试机为虚拟机时:
testbox: vm-2 p8 g
arch:
- aarch64
- x86_64
os: openeuler
# 这个参数由源码文件合入的仓库分支决定
os_version: $upstream_branch
# 测试机为容器时:
# testbox: dc-8 g
# arch:
# - aarch64
# - x86_64
# docker_image: $upstream_branch
查看日志判断是否构建成功⚓︎
2.1 可通过构建工程系统,以评论形式评论至仓库 PR 中⚓︎
rpmbuild 脚本⚓︎
在 submit rpmbuild.YAML 时,测试用例 rpmbuild 会去引用脚本
https://gitee.com/wu_fengguang/lkp-tests/blob/master/tests/rpmbuild
该脚本会通过 rpmbuild.YAML 提供的信息进行 rpmbuild -ba *.spec
。
如果构建成功,则通过 upload_rpm_pkg 函数先将测试机上打好的软件包放入 /srv/rpm/upload
, 再通过 update_repo_mq 处理上传的软件包。处理完的包会先放入/srv/rpm/testing 中,每天零点定时更新到/srv/rpm/pub 中,也就是 < https://repo.oepkgs.net/openEuler/rpm/仓库中 >
测试构建的包能否正常安装⚓︎
可以查看自动构建任务,无需提交,以评论形式评论至仓库 PR 中)⚓︎
手动提交 install.YAML⚓︎
需要加入以下参数
mount_repo_addr: 构建后的包所在仓库地址
mount_repo_name: 仓库分支
srpm_name: 构建好的 rpm 包,去除。rpm
suite: install-rpm
category: functional
install-rpm:
rpm_name: xxxx
os: openeuler
os_version: 22.03-LTS
testbox: vm-2 p8 g
arch: aarch64
#testbox: dc-8 g
#docker_image: openeuler:22.03-LTS
mount_repo_addr: https://api.compass-ci.openeuler.org:20018/rpm/testing/openeuler-22.03-LTS/compatible/c7/aarch64
mount_repo_name: compatible/c7
处理自动构建失败的包⚓︎
查找原因并修复⚓︎
可以通过 2.1 得知构建失败的原因,可在虚拟机/容器中进行重新构建并一步步修复 修复完成的源码以及 spec 文件重新放入仓库中
QA⚓︎
如何提 PR 进行建仓?⚓︎
在 < u>https://gitee.com/oepkgs/oepkgs-management/ 仓库进行建仓
1 先将该仓库 forked 到自己账号的仓库中
2 将 forked 的仓库 Git clone 到本地,新增两个配置文件,Git push 到 forked 的仓库中
3 将自己仓库的内容 Pull requests 到企业仓
如何查询软件包位置?⚓︎
https://search.oepkgs.net/ 可在此查询引入到软件所的软件包
如何下载使用仓库中的软件包?⚓︎
在 https://search.oepkgs.net/ 查询软件包在软件所中的仓库存放位置之后,点开软件包的详情页,按照安装指引便可下载使用软件包。