4.9 KiB
4.9 KiB
Gitea 工作流在线调试功能实现
功能概述
为 Gitea Actions 工作流系统添加了在线调试功能。用户可以在工作流列表页面点击"调试"按钮,进入一个专用的调试页面,在该页面可以:
- 编辑工作流 YAML 内容 - 直接修改工作流定义
- 配置调试参数 - 设置执行的分支/标签、事件类型
- 添加工作流输入 - 为 workflow_dispatch 提供输入参数
- 设置环境变量 - 添加自定义环境变量
- 实时查看日志 - 执行工作流后查看运行日志
- 管理多个调试会话 - 支持创建和删除多个调试会话
实现细节
1. 数据模型 (models/actions/debug_session.go)
新增 DebugSession 模型用于存储调试会话信息:
ID- 调试会话唯一IDRepoID- 所属仓库IDCreatorID- 创建者用户IDWorkflowID- 工作流文件名WorkflowContent- 当前编辑的工作流 YAML 内容Status- 会话状态 (draft/running/success/failed/cancelled)RunID- 执行时关联的工作流运行IDDebugParams- 调试参数 JSON (ref、event、inputs、env)ErrorMsg- 错误信息ExpiresUnix- 自动过期时间(24小时)
2. 后端服务 (services/actions/debug_workflow.go)
核心函数:
DebugWorkflow() - 启动调试工作流运行
- 解析工作流 YAML 内容
- 获取目标提交
- 创建 ActionRun 记录
- 触发通知系统启动运行
GetDebugSessionWorkflowContent() - 获取工作流原始内容
- 从仓库读取工作流文件
3. 路由处理器 (routers/web/repo/actions/debug.go)
Debug() - 显示调试页面
- 创建新的调试会话
- 加载工作流内容
- 渲染调试模板
API 接口:
APIDebugRun()- 执行调试工作流APIDebugSession()- 获取调试会话状态APIDebugSessionUpdate()- 更新调试会话内容APIDebugSessionDelete()- 删除调试会话
4. 前端界面 (templates/repo/actions/debug.tmpl)
分为左右两栏:
左栏 - 调试配置:
- YAML 内容编辑器 (textarea)
- 分支/标签选择
- 事件类型选择 (push/pull_request/workflow_dispatch 等)
- 工作流输入参数配置 (动态添加/删除)
- 环境变量配置 (动态添加/删除)
- 运行按钮
右栏 - 执行日志:
- 运行状态显示
- 实时日志输出
- 日志自动刷新 (2秒间隔)
- 复制日志按钮
5. 路由配置 (routers/web/web.go)
/repos/{owner}/{repo}/actions/debug?workflow={workflowID}
显示调试页面
/repos/{owner}/{repo}/actions/debug-api/{debugSessionID}/run
POST 执行调试工作流
/repos/{owner}/{repo}/actions/debug-api/{debugSessionID}/session
GET 获取调试会话信息
/repos/{owner}/{repo}/actions/debug-api/{debugSessionID}/update
POST 更新调试内容
/repos/{owner}/{repo}/actions/debug-api/{debugSessionID}/delete
POST 删除调试会话
6. 国际化 (options/locale/)
添加中英文翻译:
workflow.debug- 调试工作流workflow.content- 工作流内容workflow.ref- 引用(分支/标签)workflow.event- 事件类型workflow.inputs- 工作流输入workflow.env- 环境变量workflow.logs- 执行日志- 等等...
使用流程
- 进入工作流列表页面 -
/repos/{owner}/{repo}/actions - 选择工作流 - 点击左侧工作流文件
- 点击调试按钮 - "Debug Workflow" 按钮(选中工作流后显示)
- 编辑和配置 - 在调试页面修改工作流内容和参数
- 运行调试 - 点击"Run Workflow"按钮
- 查看日志 - 实时查看工作流执行日志
技术特点
- 复用现有 Runner - 使用系统现有的 runner 执行调试工作流
- 无需额外基础设施 - 直接利用现有的工作流运行系统
- 完整日志支持 - 获得和正常运行相同的完整日志输出
- 状态管理 - 支持多个并发调试会话
- 自动清理 - 24小时后自动过期的调试会话
- 权限检查 - 只有有权限的用户可以创建调试会话
扩展可能性
未来可以进一步扩展为:
- 断点调试支持
- 单步执行
- 变量查看和修改
- 调试历史记录
- 性能分析
- 集成开发者工具
文件列表
新增/修改文件:
/models/actions/debug_session.go- 新增/services/actions/debug_workflow.go- 新增/routers/web/repo/actions/debug.go- 新增/templates/repo/actions/debug.tmpl- 新增/templates/repo/actions/list.tmpl- 修改(添加调试按钮)/routers/web/web.go- 修改(添加路由)/options/locale/locale_en-US.ini- 修改(添加翻译)/options/locale/locale_zh-CN.ini- 修改(添加翻译)
部署注意
该功能无需特殊部署步骤:
- 模型会在启动时自动创建表
- 路由会在应用启动时自动注册
- 国际化文本会在系统启动时加载
只需编译和部署更新后的代码即可。