--- date: "2025-11-25T18:58:22Z" slug: "project-workflows" sidebar_position: 1 description: "在仓库项目上使用事件、过滤器和动作组合来自动化重复操作。" --- # 项目工作流 项目工作流可以在仓库项目看板上根据问题或拉取请求触发的事件自动执行操作。该功能无需外部 Runner 或 Webhook,完全在 Gitea 内部运行。 具备项目编辑权限的成员(仓库所有者、维护者和项目管理员)都可以在项目界面中创建、编辑、克隆、启用或禁用工作流。 ## 打开工作流编辑器 1. 进入仓库并打开需要自动化的 **Projects** 看板。 2. 在列列表旁选择 **Workflows** 选项卡。 3. 点击事件定义,或选中已有工作流进行编辑。 4. 选择事件、追加过滤器、按顺序添加需要的动作并保存。 每个工作流都存放在所属的项目下。如果另一个项目需要类似逻辑,请在目标项目中重新创建或克隆工作流。 ## 基本概念 - **事件(Event)**:定义何时评估工作流,例如创建问题或卡片在列间移动。 - **过滤器(Filter)**:可选条件,只有满足条件才会执行动作,例如标签或列的变化。 - **动作(Action)**:当事件与过滤器匹配时 Gitea 要执行的操作,例如添加标签或移动卡片。 ## 支持的事件 | 事件 | 触发时机 | | --- | --- | | 新建问题/拉取请求 | 创建新的问题或拉取请求。 | | 关闭问题/拉取请求 | 该问题或拉取请求被关闭。 | | 重新打开问题/拉取请求 | 已关闭的条目被重新打开。 | | 加入项目 | 问题或拉取请求被添加到该项目。 | | 从项目移除 | 条目被从项目中移出。 | | 列发生变化 | 卡片从一个列移动到另一个列。 | | 被请求修改 | 与项目关联的拉取请求收到修改请求。 | | 审查通过 | 审查者批准了该拉取请求。 | | 拉取请求已合并 | 该拉取请求被合并。 | 每个事件都可以配置多个工作流,以便在不同场景下对同一触发器执行不同操作。 ## 过滤器 过滤器用于进一步限定事件是否需执行。如果未配置过滤器,事件发生时工作流始终运行。 - **适用对象(Apply to)**:限定仅匹配 `issues only`、`pull requests only` 或同时匹配。 - **标签(Labels)**:仅当卡片已包含指定标签之一时运行。 - **来源列(Move from column)**:仅当卡片原本位于所选列之一时运行,常与“列发生变化”事件组合。 - **目标列(Move to column)**:仅当卡片移动到指定列时运行。 可以组合多个过滤器以同时满足多种条件,例如“带有 `needs-review` 标签的拉取请求移动到 “Review” 列”。 ## 动作 动作会按照添加顺序依次执行,可用的动作包括: - **添加标签(Add labels)**:为问题或拉取请求附加一个或多个标签。 - **移除标签(Remove labels)**:删除不再需要的标签。 - **移动到列(Move to column)**:将卡片移动到同一项目看板中的另一列。 - **问题状态(Issue state)**:关闭或重新打开关联的问题或拉取请求。 通过组合多个动作,可在单个工作流中完成移动卡片、更新标签等多重操作。 ## 管理工作流 ### 启用或禁用 每个工作流都带有独立的开关。禁用后即使事件触发也会被忽略,适合临时暂停自动化而保留配置。 ### 克隆事件工作流 点击 **Clone** 可以复制当前工作流(事件、过滤器与动作都会被复制)。在需要针对同一触发器设置不同条件时,复制并微调即可快速得到新的工作流。 ## 示例:自动分流新的缺陷报告 以下工作流可以让缺陷报告自动进入待处理区: 1. **事件:** Issues/PRs opened。 2. **过滤器:** 仅适用于 `issues only`;标签包含 `bug`。 3. **动作:** - 添加标签 → `needs-triage`。 - 移动到列 → “Needs Triage”。 - 问题状态 → 保持打开(如有需要也可以强制重新打开以确保可见)。 配置完成后,每当新的缺陷问题创建时都会立即拥有正确的标签并出现在指定列中,维护者可以第一时间看到需要分流的条目。 从简单规则开始,在单个项目中验证效果,再根据团队的重复性任务逐步扩展自动化逻辑。