教程:使用 GitLab 推动 Scrum 实践
- Tier: Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
本教程提供分步指南,说明如何使用 GitLab 中的敏捷规划与跟踪功能来推动核心 Scrum 仪式和工作流。
通过有策略地配置群组、项目、看板及其他功能,团队可实现更高的透明度、协作效率和交付节奏。
根据 Martin Fowler 的 敏捷熟练度模型,实践 Scrum 的团队:
…会从其软件为赞助商、客户和用户带来的价值角度进行思考和规划。
他们通过每月展示进展、定期反思改进流程和工作习惯,以提供更多业务和客户价值来实现这一目标。
本教程涵盖以下主题:
配置群组与项目
要在 GitLab 中推动 Scrum 实践,首先需搭建群组和项目的基础结构。
您将使用群组创建可被其下嵌套项目继承的看板和标签。项目将包含构成每个冲刺实际工作项的议题和任务。
理解 GitLab 的继承模型
GitLab 采用层级结构,群组包含项目。在群组级别应用的设置和配置会级联到子项目,从而实现跨项目的标签、看板和迭代标准化:
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: GitLab 继承模型图
accDescr: 展示 GitLab 中群组、项目、议题、标签、里程碑、迭代、任务和史诗之间的关联关系
Group -->|包含| Project
Group -->|包含| Epics
Group -->|包含| Labels
Group -->|包含| Boards
Group -->|包含| Iterations
Group -->|包含| Milestones
Group -->|包含| Roadmaps
Project -->|包含| Issues
Project -->|包含| Templates
Project -->|包含| Tasks
Project -->|包含| Milestones
Project -->|包含| Labels
Labels .->|级联至| Project
Issues .->|汇总至| Group
Iterations .->|级联至| Project
Milestones .->|级联至| Project
Templates .->|级联至| Project
Templates .->|配置于| Group
Issues .->|属于| Epics
Issues .->|可见于| Boards
Issues .->|可见于| Lists
Issues .->|分配至| Iterations
Issues .->|分配至| Milestones
Tasks .->|属于| Issues
Tasks .->|分配至| Iterations
Tasks .->|分配至| Milestones
Epics .->|可见于| Boards
Epics .->|可见于| Roadmaps
Epics .->|可见于| Lists
- 群组包含一个或多个项目、史诗、看板、标签和迭代。群组成员身份会级联至群组下的项目。
- 您可在群组或项目中创建看板和标签。为便于在群组内多个项目中实现标准化规划工作流和报告,建议在群组级别创建。
- 任何级联至项目的对象均可关联到该项目的议题,例如:可将群组标签应用于议题。
创建群组
为 Scrum 活动创建专用群组。该群组将作为项目和配置(如看板、标签)的父容器,这些配置需跨项目标准化。
此群组将作为典型 Scrum 节奏中各项活动的主要位置,包含您的看板、功能(史诗)、用户故事(议题)汇总及标签。
创建群组步骤:
- 在左侧边栏顶部选择 新建( )并选择 新建群组。
- 选择 创建群组。
- 在 群组名称 文本框中输入群组名称。不可用作群组名称的词汇列表,请参阅 保留名称。
- 在 群组 URL 文本框中输入用于 命名空间 的群组路径。
- 选择群组的 可见性级别。
- 可选:个性化 GitLab 体验:
- 从 角色 下拉列表中选择您的角色。
- 对于 谁将使用此群组?,选择一个选项。
- 从 您将使用此群组做什么? 下拉列表中选择一个选项。
- 可选:邀请成员至群组,在 邮箱 1 文本框中输入要邀请用户的邮箱。邀请更多用户时,选择 邀请其他成员 并输入用户邮箱。
- 选择 创建群组。
创建项目
在创建的群组中建立一个或多个项目。项目将包含汇总至父群组的用户故事。
创建空白项目步骤:
- 在左侧边栏顶部选择 新建( )并选择 新建项目/仓库。
- 选择 创建空白项目。
- 输入项目详情:
- 选择 创建项目。
创建作用域标签以支持 Scrum 生命周期不同阶段
接下来,在创建的群组中创建标签,用于为议题添加分类。
最佳工具是 作用域标签,可用于设置互斥属性。
作用域标签名称中的双冒号 (::) 可防止同一作用域的两个标签同时使用。
例如,若为已添加 status::ready 标签的议题添加 status::in progress 标签,前者将被移除。
创建每个标签步骤:
- 在左侧边栏选择 搜索或跳转 并找到您的群组。
- 选择 管理 > 标签。
- 选择 新建标签。
- 在 标题 字段中输入标签名称,以
priority::now开头。 - 可选:从可用颜色中选择颜色,或在 背景颜色 字段中输入十六进制颜色值。
- 选择 创建标签。
重复上述步骤创建所需标签:
- 优先级:用于史诗看板推动功能级发布优先级。
priority::nowpriority::nextpriority::later
- 状态:用于议题看板了解用户故事在整体开发生命周期中的当前阶段。
status::triagestatus::refinestatus::readystatus::in progressstatus::in reviewstatus::acceptancestatus::done
- 类型:用于表示通常纳入单个迭代的不同类型工作:
type::storytype::bugtype::maintenance
创建迭代节奏
在 GitLab 中,冲刺称为迭代。迭代节奏包含用于规划和报告议题的独立、顺序迭代时间盒。
与标签类似,迭代会级联至群组、子群组和项目层级。因此需在创建的群组中建立迭代节奏。
前提条件:
- 您必须至少拥有群组的 Reporter 角色。
创建迭代节奏步骤:
- 在左侧边栏选择 搜索或跳转 并找到您的群组。
- 选择 规划 > 迭代。
- 选择 新建迭代节奏。
- 输入迭代节奏的标题和描述。
- 确保 启用自动调度 复选框已选中。
- 完成自动调度所需字段:
- 选择迭代节奏的自动化开始日期。迭代计划在开始日期的同一周日开始。
- 从 持续时间 下拉列表中选择 2。
- 从 即将到来的迭代 下拉列表中选择 4。
- 选择 启用滚动 复选框。
- 选择 创建节奏。节奏列表页面将打开。
按此方式配置迭代节奏后:
- 每个冲刺持续两周。
- GitLab 自动创建未来四个冲刺。
- 当前冲刺关闭时,未完成的议题将自动重新分配至下一个冲刺。
您也可以禁用 自动调度,并在节奏中 手动创建和管理迭代。
管理功能待办列表
功能待办列表以史诗形式捕获想法和期望功能。在细化此待办列表时,史诗将被优先级排序以流入即将到来的冲刺。
本节涵盖创建史诗看板以推动待办列表管理,并编写您的首个功能史诗。
确定工作结构方式
GitLab 具有扩展性,支持不同风格的待办列表管理。本教程将按以下方式构建交付物:
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: 交付物结构
accDescr: 从功能(史诗)到任务故事(议题)到实施步骤(任务)的流程图
Epic["功能(史诗)"] --> Issue["任务故事(议题)"]
Issue --> Task["实施步骤(任务)"]
-
史诗代表团队可在单个迭代中交付的功能。
-
每个史诗将包含许多 任务故事。
- 故事应提供可感知的客户价值,包含明确的验收标准,且足够小,使个人可在一到两天内完成。
- 团队每个冲刺应能完成四到十个故事。
-
虽然有多种功能拆分策略,但优秀策略是 垂直切分 故事,将其拆分为用户达成目标所需的独立、自包含故事。
虽然您可能无法向客户交付单个故事,但团队应能通过生产环境或预发布环境上的功能标志测试和交互每个故事。
这不仅有助于向利益相关者展示故事进展,也是将复杂功能分解为可开发目标的有效机制。 -
根据故事复杂度,可使用任务将故事拆分为开发者需完成的离散实施步骤。
在时间范围方面,遵循以下工作项规模和范围指南:
- 功能 可在单个迭代中完成。
- 故事 可在几天内完成。
- 任务 可在几小时到一天内完成。
示例:垂直切分功能
以下是基于最终用户旅程将功能垂直切分为任务故事的示例:
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: 切分功能
accDescr: 利用最终用户旅程识别迭代中需完成的工作片段
Epic["史诗:使用应用时,<br>我需要创建账户,<br>以便使用应用功能"] --> Issue1["议题:创建账户时,<br>我需要指定邮箱地址,<br>以便接收应用的未来更新"]
Epic --> Issue2["议题:创建账户时,<br>我需要设置密码,<br>以确保账户安全"]
Epic --> Issue3["议题:创建账户并输入所需信息时,<br>我需要完成账户创建,<br>以便登录"]
您已将应用未修改的账户注册功能拆分为三个独立故事:
- 输入邮箱地址。
- 设置密码。
- 选择按钮执行账户创建。
将功能拆分为故事后,可进一步将故事拆分为离散实施步骤:
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: 进一步拆分故事
accDescr: 将故事拆分为更小的步骤
Issue1["议题:创建账户时,<br>我需要指定邮箱地址,<br>以便接收应用的未来更新"]
Issue1 --> Task2["任务:后端<br>验证邮箱格式"]
Issue1 --> Task3["任务:后端<br>接受客户端 POST 请求的 API 端点"]
Issue1 --> Task4["任务:前端<br>显示邮箱输入框"]
Issue1 --> Task5["任务:前端<br>验证失败时显示错误消息"]
设置发布规划看板
您已定义交付物结构。下一步是创建史诗看板,用于开发和维护功能待办列表。
创建新史诗看板步骤:
- 在左侧边栏选择 搜索或跳转 并找到您的群组。
- 选择 规划 > 史诗看板。
- 在左上角选择包含当前看板名称的下拉列表。
- 选择 新建看板。
- 输入新看板标题:
发布规划。 - 选择 创建看板。
接下来,为 priority::later、priority::next 和 priority::now 标签 创建列表。
创建新列表步骤:
- 在看板右上角选择 创建列表。
- 在 新建列表 列中展开 选择标签 下拉列表并选择用作列表范围的标签。
- 选择 添加至看板。
您将使用这些列表推动功能在看板中从左向右移动。
使用发布规划看板中的每个列表代表以下时间范围:
- 开放:尚未准备好优先级排序的功能。
- 后期:将优先级排序至后期发布的功能。
- 下期:计划在下期发布的功能。
- 当前:优先级排序至当前发布的功能。
- 关闭:已完成或已取消的功能。
创建首个史诗
接下来,在 priority::now 列中创建新史诗:
-
在
priority::now列顶部选择 新建史诗( )图标。 -
输入新史诗标题:
使用应用时,我需要创建账户,以便使用应用功能。 -
选择 创建史诗。
完成此步骤后,您的看板应如下所示:
现在您可以使用 发布规划 看板快速构建待办列表。
草拟多个功能并将其优先级排序至 当前、下期、后期 列。
接下来花些时间将每个故事进一步拆分为故事和任务。
要重新排序列表内或跨列表的功能史诗,拖动史诗卡片。您也可以 将卡片移至列表顶部或底部。
管理用户故事待办列表
当功能定义为史诗后,下一步是将这些功能拆分为垂直切分的离散议题。
然后将在专用待办列表看板上细化这些议题,并按迭代排序。
将功能拆分为故事
提前将功能垂直切分为故事,以提高冲刺规划会议效率。
在上一步中,您创建了首个功能。让我们将其拆分为故事。
创建首个故事步骤:
-
在左侧边栏选择 搜索或跳转 并找到您的群组。
-
选择 规划 > 史诗看板。
-
在左上角确保下拉列表显示 发布规划。若未显示,从下拉列表中选择该看板。
-
点击史诗卡片标题打开史诗。
-
在 子议题和史诗 部分选择 添加 > 添加新议题。
-
输入以下议题标题:
创建账户时,我需要指定邮箱地址,以便接收应用的未来更新 -
从 项目 下拉列表中选择创建议题的项目。
-
选择 创建议题。
-
对其他两个垂直切分重复此过程:
创建账户时,我需要设置密码,以确保账户安全创建账户并输入所需信息时,我需要完成账户创建,以便登录
细化用户故事待办列表
在上一步中,您将功能拆分为完成功能所需的用户故事。
接下来,设置议题看板作为管理细化用户故事待办列表的规范位置。
在群组中创建标题为 待办列表 的新议题看板。
您将使用此看板将故事排序并安排至即将到来的冲刺(迭代):
- 在左侧边栏选择 搜索或跳转 并找到您的群组。
- 选择 规划 > 议题看板。
- 在左上角选择包含当前看板名称的下拉列表。
- 选择 新建看板。
- 输入新看板标题:
待办列表。 - 选择 创建看板。
创建看板后,为每个即将到来的迭代创建新列表:
- 在议题看板页面右上角选择 创建列表。
- 在出现的列中,于 范围 下选择 迭代。
- 从 值 下拉列表中选择一个迭代。
- 选择 添加至看板。
- 对其他即将到来的迭代重复上一步。
当迭代结束后,您应 移除已完成迭代列表,并添加基于节奏设置自动创建的新未来迭代列表。
此时,故事尚未估算或拆分为任务。为其标记细化状态:
- 在看板中 选择每个议题卡片 并应用
status::refine标签:- 在侧边栏的 标签 部分选择 编辑。
- 从 分配标签 列表中选择
status::refine标签。 - 选择 分配标签 旁的 X 或标签区域外的任意位置。
- 将三个故事拖动至目标即将到来的冲刺,以分配至相应冲刺时间盒。
至此,您的 待办列表 看板应如下所示:
实践中,您将使用此看板将多个故事排序至即将到来的迭代。
当待办列表增长,您有数十个跨越多个功能的故事时,启用 按史诗分组 会很有帮助,这样您可查看与其对应功能史诗相关的故事。
故事分组后,将其排序至即将到来的冲刺更容易。
冲刺规划仪式
待办列表准备就绪后,即可规划即将到来的冲刺。
您可以使用同步和异步方式在 GitLab 中推动冲刺规划会议。
同步规划
当冲刺规划仪式开始时,与团队一起打开 待办列表 看板并逐个讨论故事。
您应在当前冲刺的最后一天开始规划下一个冲刺。讨论每个议题时:
-
审查并协作制定验收标准。您可在议题描述中使用复选框或列表项记录。
-
进一步 将故事拆分为任务 以对应每个实施步骤。
-
估算议题的故事点工作量或复杂度,并在议题的 权重 字段中设置此值。
-
团队对议题范围和故事点值满意并达成一致后,为议题应用
status::ready标签:- 在侧边栏的 标签 部分选择 编辑。
- 从 分配标签 列表中选择
status::ready标签。 - 选择 分配标签 旁的 X 或标签区域外的任意位置。
遍历即将到来的迭代中所有议题后,冲刺规划即完成!
请将团队速度纳入冲刺承诺。您可在每个迭代列表顶部找到分配给每个冲刺的故事点总数(权重)。
还需注意可能从上一次冲刺滚动的故事点。
异步规划
不举行同步会议,而是使用议题运行冲刺规划。
鉴于异步冲刺规划的性质,您应在当前冲刺结束前几天启动此流程。
为所有团队成员提供充足时间参与和协作。
-
打开 待办列表 议题看板:
- 在左侧边栏选择 搜索或跳转 并找到您的群组。
- 选择 规划 > 议题看板。
- 在左上角选择包含当前看板名称的下拉列表。
- 选择 待办列表。
-
在即将到来的冲刺列表中,选择 新建议题( )。
-
输入议题标题:
发布规划。 -
选择 创建议题。
-
打开议题并为分配至即将冲刺的每个故事创建讨论线程。
在议题 URL 后附加
+可自动展开标题。 在议题 URL 后附加+s可自动展开标题、里程碑和指派人。 您可使用以下模板为线程创建复选框:## https://gitlab.example.com/my-group/application-b/-/issues/5+ - [ ] 验收标准已定义 - [ ] 权重已设置 - [ ] 实施步骤(任务)已创建例如:
-
然后,在即将到来的冲刺开始前,团队成员应异步地:
- 讨论每个议题,提出问题,协作就每个计划议题的验收标准达成一致。
- 使用反应表情符号(如
:one:、:two:、:three:)投票决定故事点(权重)应为多少。
若团队成员设置不同的故事点值,这是进一步讨论直至达成共识的好机会。
您也可以对所有反应取平均值以确定故事点值。 - 将垂直切分(议题)拆分为实施步骤(任务)。
-
每个故事讨论结束时,更新议题中的验收标准变更,并在 权重 字段中设置故事点值。
-
更新故事后,为每个议题添加
status::ready标签。 -
然后,为表示该垂直切分的规划已完成,在规划议题中 解决每个讨论线程。
跟踪冲刺进度
为可视化和管理工作,团队可创建专用议题看板代表当前冲刺范围。
该看板提供团队进展和潜在阻塞项的透明度。团队还可使用迭代分析通过燃尽图获得额外可见性。
为当前冲刺创建看板
在群组中创建标题为 当前冲刺 的新议题看板:
- 在左侧边栏选择 搜索或跳转 并找到您的群组。
- 选择 规划 > 议题看板。
- 在左上角选择包含当前看板名称的下拉列表。
- 选择 新建看板。
- 输入新看板标题:
当前冲刺。 - 在 范围 旁选择 展开。
- 在 迭代 旁选择 编辑。
- 在您的迭代节奏下方选择 当前。
- 选择 创建看板。
看板现在仅过滤显示分配至当前迭代的议题。
使用它来可视化团队在活跃冲刺中的进展。
接下来,为所有状态创建标签列表:
-
在议题看板页面右上角选择 创建列表。
-
在出现的列中,于 范围 下选择 标签。
-
从 值 下拉列表中选择一个标签:
status::refine:议题需进一步细化后才能开发。status::ready:议题已准备好开发。status::in progress:议题正在开发中。status::review:议题对应的 MR 正在进行代码审查。status::acceptance:议题已准备好供利益相关者验收和 QA 测试。status::done:议题的验收标准已满足。
-
选择 添加至看板。
-
对其他标签重复上述步骤。
然后,随着冲刺进展,将议题拖动至不同列表以更改其 status:: 标签。
查看冲刺的燃尽图和燃起图
在冲刺期间查看迭代报告会很有帮助。
迭代报告提供进度指标和燃尽图、燃起图。
查看迭代报告步骤:
- 在左侧边栏选择 搜索或跳转 并找到您的群组。
- 选择 规划 > 迭代 并选择一个迭代节奏。
- 选择一个迭代。