跳转至

CI 门禁流程

门禁流程

当开发者(contributor)向OpenCloudOS Stream的软件仓库首次发起Pull request时,门禁CI会对该Pull request进行一系列检查,确保其符合OCS软件包合入的的标准。门禁CI大致会经历如下阶段:

  • 门禁CI自动检查阶段
  • contributor确认阶段(需要PR发起人参与)
  • 测试重编阶段(若有)
  • Maintainer确认阶段(需要Maintainer审核最终结论)
  • PR后处理阶段

需要contributor负责的阶段主要是:contributor确认阶段

需要Maintainer负责的阶段主要是:测试重编阶段 + Maintainer确认阶段 + PR后处理阶段

整体的流程图如下所示:

1

各阶段详情

门禁CI自动检查阶段

该阶段会在开发者(contributor)向OpenCloudOS Stream的软件仓库首次发起Pull request后自动执行,或者在任意阶段评论/retest,触发执行。主要完成如下检查:

  • spec文件检查:主要检查version, release, 以及changelog是否合规
  • 编译构建检查:利用koji完成不同架构的的编译构建
  • 安装检查:将编译好的rpm软件包,进行安装测试
  • 兼容性检查:从如下指标,检查升级后的软件包相对于当前的是否有兼容性变化
    • 子包数目(subrpmlist)是否变化?
    • 是否增删文件(filelist)?
    • 原本提供/需求的能力(ability)是否发生变化?
    • abi是否发生改变?
    • api是否发生改变?
    • 可执行文件(excutable)的输出是否发生改变?
    • 配置文件(conf)是否发生改变?

门禁扫描结果如图所示:(其中备注栏为提示信息,告知开发者问题原因,详细需查看对应检查项的日志)

2

contributor确认阶段

若编译安装检查无FAILED项目,再完成兼容性检查各项后(兼容性检查各项出现FAILED不会影响流程推进),会自动流转到contributor确认阶段,如图所示:

3

该阶段的主要目的是为了让开发者审核CI的兼容性检查结果确认兼容性结论。 如果你仔细比对代码后,确认兼容性检查某项有误,可以评论disagree <item>(例如:不认为excutable发生改变,或者excutable的改变不能引发兼容性变化,评论disagree excutable); 当然如果你认为某项实际兼容性发生了改变,但是CI没有检查出来,同样可以评论disagree <item>

温馨提示:agreedisagree并不会阻碍后续PR的合入,该阶段是为了人工确认各项兼容性是否改变,从而决定后续哪些软件包需要在当前PR合入后,基于该软件包进行重编,以确保该包兼容性改变后,系统依旧稳定

AI辅助检查

CI门禁能够检查出哪些检查项出现变更,但有时候出现变更不一定等于兼容性发生变化!由此我们引入AI,辅助开发者判断,如图所示 4

测试重编阶段

contributor确认兼容性检查结果后,CI门禁会根据各兼容性检查项结论,去寻找需要基于此进行测试/正式重编的软件包,判断原则如下:

  • 测试重编包的来源:

    • 1.兼容性发生改变,该包(B)可能需要基于升级后的软件包(A)重编,需要测试重编进一步确认
    • 2.该包(B)编译过程的check(测试)阶段用到了软件包(A),尽管兼容性无改变,但某些行为的变化会导致check阶段失败
  • 正式重编包来源:

    • 1.兼容性发生改变,确认该包(B)受到影响,必须基于升级后的软件包(A)重编
    • 2.测试重编失败的包,也会加入到正式重编

测试重编会在当前阶段进行,直到所有软件包测试重编结束,才会自动流转到下一阶段。

其中正式重编的表格只作为展示用,会在PR合入后,创建正式重编ISSUE

5

Maintainer确认阶段

该阶段由当前仓库的Maintainer(负责人)来审核,需要审查之前的所有流程,包括(CI的检查结果,contributor的分析结论,以及测试重编的结果) maintainer审核完后,一般可以采取如下动作:

  • 测试重编失败项需要重试,评论/resubmit <task_id>
  • 不认同CI兼容性检查某项(contributor也没处理),评论/compat-mistake <item>
  • 不认同contributord的结论,且当前环节无法修正,需重置兼容性检查结果,评论/compat-reset
  • 同意合入PR,评论/approve

如图所示:

6

PR后处理阶段

PR后处理阶段主要是在PR合入后,完成当前仓库软件包的正式编译,如果正式编译失败,会建立相关ISSUE进行处理,如图所示:

7

正式编译完成后,如果有待正式重编包和待测试重编包(测试重编阶段不予处理的包,包括编译耗时的包和超过阈值数量的包),会建立正式重编ISSUE和测试重编ISSUE! 正式重编ISSUE如下:

8

测试重编ISSUE如下:

8

常见问题解答

问:看不懂兼容检查结果,不确定是评论/agree还是/disagree

答:在阅读章节,了解门禁流程的基础上,如果仍不知如何分析兼容性,可以查看《门禁排查手册》里兼容性检查的环节

问:评论/agree或者/disagree会阻塞我本次PR的合入嘛?

答:不会,该评论只会决定哪些包受到影响需要正式/测试重编,因此需仔细分析兼容性后,再评论