自动升级工具
stream 版本提供自动升级工具,对于需要升级的软件包,开发者可以在对应仓库下创建升级 issue,一条命令触发自动升级流水线,完成升级以及相关检查。
操作指南
具体流程如下:
-
创建升级 issue:点击 “新建 issue”,默认创建 “升级” 类型 issue,根据模板指引创建 issue,填写升级原因;
-
触发升级:评论
/upgrade [version]
可触发指定版本升级;也可评论/upgrade
默认使用最新版本升级; -
流水线结果:
-
流水线首先返回升级信息,若升级成功则继续触发编译构建及兼容性检查;
-
若流水线因网络等偶发原因失败,请评论
/upgrade
重新触发升级流程; -
若需要修改代码,则根据提示修改
ocs-upgrade/<repo>
仓库,流水线自动授予触发升级的用户该仓库的push
权限:git clone git@gitee.com:ocs-upgrade/<repo>.git
-
-
修改与检查:每次对仓库进行修改后,请评论
/recheck
重新进行编译构建及兼容性检查 -
结论:兼容性工具检查结果供参考,请根据 Release Note/ Changelog 及代码,分析并确认兼容性,决定是否进行升级
-
升级:评论
/pr
即可正式提交 pr -
无需升级:请在侧边栏将状态修改为
已拒绝
,关闭当前 issue; -
延迟升级:请评论
/TBD [days]
命令挂起本次升级,若不指定挂起天数,会在下次大规模升级时统一触发,若指定天数,则在下次大规模升级时,只有达到该天数才会触发升级;
-
-
反馈:若升级失败或需要反馈意见,可通过
/note <反馈类型> <反馈意见>
命令反馈升级失败原因,必要时对仓库代码进行调整,方便后续版本进行自动升级。 -
帮助命令:评论
/help
可以获得帮助命令输出
注:目前仅支持当前仓库成员执行自动升级流程,申请加入仓库成为仓库成员,请参考 软件包权限管理-加入仓库
章节。
升级问题手册
rpm-upgrade 自动升级CI流水线旨在用于自动升级时,修改spec中 Version/Release/Changelog,sources文件,下载/上传 tarball,尝试处理补丁冲突。下面对 CI 升级时常见问题进行分类,并附上相应处理步骤。
- 影响自动升级CI
在此过程中,Source获取、跟踪仓库 等是必须成功项,因此出现此类问题时视为 自动升级失败,必须修正。
- Source修正:Source下载链接固定、Source链接需要更新等。
- 解决:需要修正spec文件中的Source链接。修改主仓库Source链接 合入PR后,重新发起/upgrade。
- 跟踪仓库有误:该包yaml文件跟踪仓库有误,需更新。
-
自定义脚本:如:Source源码包无法直接获取,需要编写脚本生成;版本号无法直接获取,需要脚本生成 等。上述场景,均需编写自定义脚本,接入CI完成升级。
- 解决:需要编写自定义脚本,见 rpm-upgrade指南-自定义脚本升级。主仓库新增脚本 合入PR后,重新发起/upgrade。
-
不影响自动升级CI
如果 koji编译失败、补丁冲突等 是CI尽力处理项,让CI尽可能帮助开发者完成升级时的机械化动作。因此出现问题时,不视为自动升级失败。
- 编译失败:koji编译失败,如:prep、build、install 阶段代码需调整,%files 阶段文件新增、删除、更名等。
- 解决:升级时maintainer介入处理。修改spec后 /recheck。
- 补丁冲突:发行版补丁、上游补丁冲突,需maintainer介入调整。
- 解决:升级时maintainer介入处理。修改spec后 /recheck。
- 系列包升级:该包为系列包,需按顺序升级。
- 解决:顺序升级即可。
- 无需自动升级:软件包版本固定、spec修改繁杂 等,需人工升级,因此不进行自动升级。
- 解决:人工升级。
- Changelog链接更新:issue中给出的Changelog不准确or衰退,可指定具体的Changelog发布网址。
- 解决:在yaml文件新增changelog_url 字段即可。详见:yaml字段介绍;yaml修改示例;
自定义脚本升级
部分软件包无法使用通用的自动升级流水线,需要自定义升级脚本,如 rust系列的vendor处理、npm系列生成tarball 等。
需考虑和CI适配,定义接口or规范等,便于调用脚本,完成升级。
脚本规范
如果想在 rpm-upgrade 中,适配自定义脚本,进行自动升级。需要在对应 软件包的 gitee 仓库中,添加以下文件:
- up.yaml文件:该文件存在,表明将结合自定义脚本,进行升级。
- sh/py脚本: 具体的自定义脚本;
up.yaml内容如下:
- name:告知rpm-upgrade,脚本涉及内容,如生成了Source1、Source2到本地。后续rpm-upgrade将其上传到COS、计算sha值等;
- order:脚本的执行方式;
Source:
name:
- Source1
- Source2
order:
- sh test.sh -h
- python3 make_tarball.py
Version:
name:
- device_mapper_version
- another_version
order:
- sh get_ver.sh
使用示例
以下为常见场景脚本示例,如有使用疑问,请联系gordonwwang。
- 通过脚本生成Source
Source包无法直接wget获取,需要执行脚本生成。示例:rustup生成Source1
注:脚本只需要生成 Source1 的源码包即可,rpm-upgrade工具会根据 up.yaml文件中声明了的Source1,自动将其上传、更新sources文件sha值等。
- 获取版本号
升级lvm2时,发现版本号device_mapper_version也需修改。