跳转至

构建 rpm 包流程⚓︎

总体流程⚓︎

  1. 基于 PR,在 oepkgs-mangement 仓库中创建配置文件,用于建仓
  2. 往步骤一生成的 https://gitee.com/src-oepkgs/ 仓库中补充构建所需源码文件
  3. 仓库的 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,自动触发构建任务原理⚓︎

  1. 仓库的 webhook 将自动触发提交构建任务
  2. 查看日志判断是否构建成功
  3. 构建成功则会自动进行安装测试,若成功则入库
  4. 构建/安装测试失败则查看日志分析原因并进行修复

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/ 查询软件包在软件所中的仓库存放位置之后,点开软件包的详情页,按照安装指引便可下载使用软件包。