openSUSE:构建服务概念评审
请求评审系统
OBS 支持请求的评审。简单的请求系统已经足以满足未知人员想要向项目或软件包提交更改的情况。任何目标项目或软件包的所有者都可以评审请求并批准或拒绝它。
在某些情况下(尤其是在重要项目中),由单个评审人评审请求是不够的,或者此人不太确定并希望在之前咨询另一个人。此外,某些流程可能定义了需要评审更改的多个人员或组。本评审系统旨在涵盖这种情况。
当请求获得评审人添加时,请求状态从“new”(新建)更改为“review”(评审)。评审人将在他们的“我的请求”列表中看到该请求,该列表在 webui 或 osc 中可见,并且需要批准它。只要任何评审人拒绝评审,整个请求就会更改为“rejected”(拒绝)。当所有评审人都批准评审后,请求将返回“new”(新建)状态。
另一种用例是逐步进行(可能耗时)所有请求的评审,然后一次性接受所有请求。因此,所有源代码更改将在定义的时间点生效。这对于像 openSUSE:Factory 这样的大型项目非常有用,评审可以在一周内进行,但整个重建仅每周触发一次。
请求所有者仍然可以忽略开放的评审任务,但如果他们真的想忽略反馈,UI 会向他们发出警告。
为项目或软件包设置默认评审人
可以通过在目标项目中将这些评审人定义为用户或组,并赋予他们“reviewer”(评审人)角色来实现。结果是,针对此项目或软件包的新请求最初将始终以“review”(评审)状态创建。
只需使用 webui 或 osc 添加具有此角色的用户或组
osc maintainer -r reviewer -a Rudi openSUSE:Factory
当在项目和软件包内部都定义了评审人时,所有评审人都将被添加到新的请求中。
例如,openSUSE:Factory 可能会根据我们当前的策略在元数据中获得以下评审组
<group groupid="legal-team" role="reviewer" /> <group groupid="source-review-team" role="reviewer" />
而 openSUSE:11.3:Update 可能会获得
<group groupid="security-team" role="reviewer" /> <group groupid="legal-team" role="reviewer" /> <group groupid="source-review-team" role="reviewer" />
请求对选定的请求进行评审
任何目标所有者都可能希望对另一个可疑的更改请求另一个用户或组进行额外的评审。例如,当存在添加 setuid root 位的提交请求时,您可能希望首先咨询安全团队。您可以在 webui 或使用 osc 中轻松完成此操作
osc review add -G security-team $REQUEST_ID
处理评审
OBS 2.1 的 webui 具有列出、接受和拒绝评审的功能。它还在您的“我的请求”列表中列出了开放的评审。osc 0.129 支持列出评审
osc review list
或接受/拒绝评审
osc review accept/decline $REQUEST_ID
技术实现细节
本草案描述了对请求系统进行的增强,以请求和执行评审。
评审是一个可选状态,可以由请求创建者或请求目标所有者设置。它旨在用于,当一方或多方应在接受更改之前批准时。请求可以包含多个评审。
评审有意义的示例包括,当另一个软件包受到影响并且软件包所有者应了解它时。还需要来自安全、维护或 QA 团队的评审。
评审人可以建议替代解决方案,他需要在一个自己的项目/软件包中准备该解决方案。
在所有评审人接受状态后,应处理请求。
因此,请求 xml 可以包含以下片段之一或多个
<review state="superseded" by_group="maintenance" who="Harald" when="20090810"> <comment>looks good, but minor changes are needed</comment> </review> <review state="new" by_user="adrianSuSE" />
此示例描述了一个已处理的评审。“maintenance”(维护)组被要求处理评审。Harald 于 200900810 完成了此操作并接受了提交,但他修复了一些内容,因此他建议使用他的提交代替。替代提交在请求状态元素中由“superseded_by”(被替代)属性指定。
另一个评审应由 adrianSuSE 用户完成,此评审尚未完成。由于请求的状态已设置为 superseded(被替代)并且已创建新的请求,因此此评审将不再在此请求中完成。
- 状态可以包含“new”(新建)、“accepted”(已接受)、“declined”(已拒绝)或“superseded”(被替代)。
- 可以提供用户或组,但不能同时提供两者。
- 在 superseded(被替代)状态下,superseded_by 是必需的。
通过请求命令添加评审或评审项目状态更改
POST /request/:id cmd=addreview&by_group="security" POST /request/:id cmd=changereviewstate&by_user="adrianSuSE"&newstate="accepted"&comment="Free text comment"