chore: 重构 OpenCode 命令和技能文档体系
- 新增:统一的 git 命令文档(add/commit/push/pull 等) - 新增:整合的 Gitea 技能文档(API、运行器、工作流等) - 新增:工作流模板(Android、Go、Node.js 等) - 移除:已弃用的旧命令脚本和发布脚本 - 改进:.gitignore 添加敏感文件保护规则 - 改进:AGENTS.md 完善了开发规范和示例 此次重组统一了命令和技能的文档结构,便于后续维护和扩展。
This commit is contained in:
692
skill/gitea/troubleshooting.md
Normal file
692
skill/gitea/troubleshooting.md
Normal file
@@ -0,0 +1,692 @@
|
||||
# Gitea 故障排查
|
||||
|
||||
常见问题的诊断和解决方案。
|
||||
|
||||
## 配置问题
|
||||
|
||||
### 1. 配置文件不存在
|
||||
|
||||
**症状**:
|
||||
```
|
||||
❌ Gitea 未配置,请运行 /gitea-reset
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- 首次使用,未进行配置
|
||||
- 配置文件被删除或移动
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
/gitea-reset
|
||||
```
|
||||
|
||||
按照提示完成配置。
|
||||
|
||||
---
|
||||
|
||||
### 2. Token 无效或已过期
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Token 状态: ✗ 无效或已过期
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- Token 已过期
|
||||
- Token 被撤销
|
||||
- Token 复制不完整
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 重新生成 Token:
|
||||
- 登录 Gitea → 设置 → 应用 → 访问令牌
|
||||
- 生成新 Token(权限:repo, admin:org, write:runner)
|
||||
|
||||
2. 更新配置:
|
||||
```bash
|
||||
/gitea-reset
|
||||
```
|
||||
|
||||
3. 或手动编辑配置文件:
|
||||
```bash
|
||||
vim ~/.config/gitea/config.env
|
||||
# 更新 GITEA_TOKEN=new_token
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. 连接 Gitea 失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
❌ 连接失败 (HTTP 404)
|
||||
❌ 连接失败 (HTTP 500)
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- URL 错误
|
||||
- 网络问题
|
||||
- Gitea 服务器宕机
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查 URL:
|
||||
```bash
|
||||
source ~/.config/gitea/config.env
|
||||
echo $GITEA_URL
|
||||
```
|
||||
|
||||
2. 测试网络连接:
|
||||
```bash
|
||||
curl -s "$GITEA_URL/api/v1/version"
|
||||
```
|
||||
|
||||
3. 在浏览器中访问 URL
|
||||
|
||||
**解决方案**:
|
||||
- 修正 URL(不要包含 `/api/v1`)
|
||||
- 检查网络连接
|
||||
- 联系 Gitea 管理员
|
||||
|
||||
---
|
||||
|
||||
### 4. 权限不足
|
||||
|
||||
**症状**:
|
||||
```
|
||||
❌ 权限不足 (HTTP 403)
|
||||
⚠ 缺少 admin:org 权限
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- Token 权限不足
|
||||
- 不是组织成员
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 重新创建 Token,选择更多权限
|
||||
2. 联系组织管理员添加为成员
|
||||
3. 使用个人仓库/Runner 代替组织级别
|
||||
|
||||
---
|
||||
|
||||
## Runner 问题
|
||||
|
||||
### 1. Runner 创建失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
❌ 获取注册 Token 失败
|
||||
❌ Runner 注册失败
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- Token 缺少 `write:runner` 权限
|
||||
- 组织不存在
|
||||
- 网络问题
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查 Token 权限:
|
||||
```bash
|
||||
/gitea-config
|
||||
```
|
||||
|
||||
2. 验证组织存在:
|
||||
```bash
|
||||
source ~/.config/gitea/config.env
|
||||
curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$GITEA_URL/api/v1/orgs/$GITEA_DEFAULT_ORG"
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
- 更新 Token 权限
|
||||
- 设置正确的组织:`/gitea-switch-org <org>`
|
||||
|
||||
---
|
||||
|
||||
### 2. Runner 无法启动
|
||||
|
||||
**症状**:
|
||||
```bash
|
||||
act_runner daemon --config ...
|
||||
# 进程立即退出或报错
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- `act_runner` 未安装
|
||||
- 配置文件错误
|
||||
- 端口被占用(cache service)
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查 act_runner:
|
||||
```bash
|
||||
which act_runner
|
||||
act_runner --version
|
||||
```
|
||||
|
||||
2. 验证配置文件:
|
||||
```bash
|
||||
cat ~/.config/gitea/runners/runner-name/config.yaml
|
||||
```
|
||||
|
||||
3. 检查端口占用:
|
||||
```bash
|
||||
lsof -i :9000
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 安装 act_runner:
|
||||
```bash
|
||||
brew install act_runner
|
||||
```
|
||||
|
||||
2. 修复配置文件(确保路径正确)
|
||||
|
||||
3. 更改端口(如果 9000 被占用):
|
||||
```bash
|
||||
vim ~/.config/gitea/runners/runner-name/config.yaml
|
||||
# 修改 port: 9001
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. Runner 已注册但不在线
|
||||
|
||||
**症状**:
|
||||
- Gitea 中看不到 Runner
|
||||
- Workflow 无法分配到 Runner
|
||||
|
||||
**原因**:
|
||||
- Runner 进程未运行
|
||||
- 网络连接问题
|
||||
- Labels 不匹配
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查 Runner 进程:
|
||||
```bash
|
||||
/gitea-list-runners
|
||||
```
|
||||
|
||||
2. 查看 Runner 日志:
|
||||
```bash
|
||||
tail -f ~/.config/gitea/runners/runner-name/runner.log
|
||||
```
|
||||
|
||||
3. 测试 Gitea 连接:
|
||||
```bash
|
||||
source ~/.config/gitea/config.env
|
||||
curl -s "$GITEA_URL/api/v1/version"
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 启动 Runner:
|
||||
```bash
|
||||
act_runner daemon --config ~/.config/gitea/runners/runner-name/config.yaml
|
||||
```
|
||||
|
||||
2. 检查网络和防火墙设置
|
||||
|
||||
3. 验证 Labels 匹配
|
||||
|
||||
---
|
||||
|
||||
### 4. Labels 不匹配
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Workflow 一直 pending,不执行
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- Workflow 的 `runs-on` 与 Runner labels 不匹配
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查 Runner labels:
|
||||
```bash
|
||||
/gitea-list-runners
|
||||
# 或
|
||||
cat ~/.config/gitea/runners/runner-name/.runner | jq '.labels'
|
||||
```
|
||||
|
||||
2. 检查 Workflow:
|
||||
```yaml
|
||||
jobs:
|
||||
build:
|
||||
runs-on: darwin-arm64 # 这个 label 必须存在
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 修改 Workflow 的 `runs-on` 匹配 Runner labels
|
||||
2. 或重新创建 Runner 使用正确的 labels
|
||||
|
||||
---
|
||||
|
||||
## Workflow 问题
|
||||
|
||||
### 1. Workflow 不触发
|
||||
|
||||
**症状**:
|
||||
- 推送代码后 Workflow 不执行
|
||||
|
||||
**原因**:
|
||||
- 路径过滤不匹配
|
||||
- 分支不匹配
|
||||
- Runner 不在线
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查触发条件:
|
||||
```yaml
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'backend/**' # 确保修改的文件在此路径下
|
||||
```
|
||||
|
||||
2. 检查 Runner 状态:
|
||||
```bash
|
||||
/gitea-list-runners
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
- 修改触发条件(删除或调整 `paths`)
|
||||
- 确保 Runner 在线
|
||||
- 检查 Gitea Actions 是否启用
|
||||
|
||||
---
|
||||
|
||||
### 2. Workflow 执行失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Job failed
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- 构建命令错误
|
||||
- 依赖缺失
|
||||
- Secret 未配置
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 查看 Workflow 运行日志(在 Gitea UI 中)
|
||||
2. 检查 Secrets 配置
|
||||
3. 在本地手动执行构建命令
|
||||
|
||||
**解决方案**:
|
||||
- 修复构建命令
|
||||
- 安装缺失的依赖
|
||||
- 配置必需的 Secrets
|
||||
|
||||
---
|
||||
|
||||
### 3. Cache 不生效
|
||||
|
||||
**症状**:
|
||||
- 每次构建都重新下载依赖
|
||||
- 构建时间没有减少
|
||||
|
||||
**原因**:
|
||||
- Cache key 每次都变化
|
||||
- Cache 目录不正确
|
||||
- Runner cache service 未启动
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查 cache key:
|
||||
```yaml
|
||||
key: cache-${{ hashFiles('**/lockfile') }}
|
||||
# 确保 lockfile 路径正确
|
||||
```
|
||||
|
||||
2. 检查 Runner 配置:
|
||||
```yaml
|
||||
cache:
|
||||
enabled: true
|
||||
dir: "..."
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
- 修正 cache key 的 hash 文件路径
|
||||
- 确保 Runner cache service 启用
|
||||
- 检查 cache 目录权限
|
||||
|
||||
---
|
||||
|
||||
## 仓库操作问题
|
||||
|
||||
### 1. 创建仓库失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
❌ 仓库已存在
|
||||
❌ Owner 不存在或无权限
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- 仓库名冲突
|
||||
- 组织不存在
|
||||
- Token 权限不足
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查仓库是否存在:
|
||||
```bash
|
||||
source ~/.config/gitea/config.env
|
||||
curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$GITEA_URL/api/v1/repos/owner/repo"
|
||||
```
|
||||
|
||||
2. 列出组织的所有仓库:
|
||||
```bash
|
||||
curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$GITEA_URL/api/v1/orgs/owner/repos" | jq -r '.[].name'
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
- 使用不同的仓库名
|
||||
- 验证组织名正确
|
||||
- 确保 Token 有 `repo` 权限
|
||||
|
||||
---
|
||||
|
||||
### 2. Git Remote 添加失败
|
||||
|
||||
**症状**:
|
||||
```
|
||||
❌ origin remote 已存在
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- 已经配置了 origin remote
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 查看现有 remote:
|
||||
```bash
|
||||
git remote -v
|
||||
```
|
||||
|
||||
2. 更新 remote URL:
|
||||
```bash
|
||||
git remote set-url origin <new-url>
|
||||
```
|
||||
|
||||
3. 或删除后重新添加:
|
||||
```bash
|
||||
git remote remove origin
|
||||
git remote add origin <new-url>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 开发环境问题
|
||||
|
||||
### 1. Android SDK 未找到
|
||||
|
||||
**症状**:
|
||||
```
|
||||
ANDROID_HOME not set
|
||||
SDK location not found
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- 未安装 Android SDK
|
||||
- 环境变量未配置
|
||||
- Runner 用户不同
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
1. 检查环境变量:
|
||||
```bash
|
||||
echo $ANDROID_HOME
|
||||
ls $ANDROID_HOME
|
||||
```
|
||||
|
||||
2. 检查 Runner 用户:
|
||||
```bash
|
||||
ps aux | grep act_runner
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 安装 Android SDK:
|
||||
```bash
|
||||
brew install --cask android-commandlinetools
|
||||
```
|
||||
|
||||
2. 配置环境变量(在 `~/.zshrc`):
|
||||
```bash
|
||||
export ANDROID_HOME=~/android-sdk
|
||||
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
|
||||
```
|
||||
|
||||
3. 确保 Runner 以正确用户运行
|
||||
|
||||
---
|
||||
|
||||
### 2. JDK 版本错误
|
||||
|
||||
**症状**:
|
||||
```
|
||||
Android Gradle Plugin requires Java 17
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- JDK 版本过低
|
||||
- JAVA_HOME 指向错误版本
|
||||
|
||||
**诊断步骤**:
|
||||
|
||||
```bash
|
||||
java -version
|
||||
echo $JAVA_HOME
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 安装 JDK 17:
|
||||
```bash
|
||||
brew install openjdk@17
|
||||
```
|
||||
|
||||
2. 更新 JAVA_HOME:
|
||||
```bash
|
||||
export JAVA_HOME=/opt/homebrew/opt/openjdk@17
|
||||
export PATH=$PATH:$JAVA_HOME/bin
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API 调用问题
|
||||
|
||||
### 1. API 返回 404
|
||||
|
||||
**原因**:
|
||||
- Endpoint 错误
|
||||
- 资源不存在
|
||||
- 组织/仓库名错误
|
||||
|
||||
**解决方案**:
|
||||
- 检查 API 路径
|
||||
- 验证资源存在
|
||||
- 参考 [API 文档](./api-reference.md)
|
||||
|
||||
---
|
||||
|
||||
### 2. API 返回 401
|
||||
|
||||
**原因**:
|
||||
- Token 无效
|
||||
- 未提供 Authorization header
|
||||
|
||||
**解决方案**:
|
||||
- 检查 Token
|
||||
- 确保 header 格式正确:`Authorization: token YOUR_TOKEN`
|
||||
|
||||
---
|
||||
|
||||
### 3. API 返回 403
|
||||
|
||||
**原因**:
|
||||
- 权限不足
|
||||
- Token 缺少必要权限
|
||||
|
||||
**解决方案**:
|
||||
- 重新创建 Token,选择更多权限
|
||||
- 联系管理员提升权限
|
||||
|
||||
---
|
||||
|
||||
## 性能问题
|
||||
|
||||
### 1. 构建速度慢
|
||||
|
||||
**原因**:
|
||||
- 未使用缓存
|
||||
- 依赖下载慢
|
||||
- Runner 性能不足
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 启用缓存:
|
||||
```yaml
|
||||
- uses: https://github.com/actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache
|
||||
key: cache-${{ hashFiles('**/lockfile') }}
|
||||
```
|
||||
|
||||
2. 使用镜像源(如 Go proxy、npm registry)
|
||||
|
||||
3. 升级 Runner 硬件
|
||||
|
||||
---
|
||||
|
||||
### 2. Cache 占用空间大
|
||||
|
||||
**原因**:
|
||||
- 长时间未清理
|
||||
- 多个 Runner 共享 cache
|
||||
|
||||
**解决方案**:
|
||||
|
||||
1. 定期清理:
|
||||
```bash
|
||||
~/.config/gitea/cleanup-cache.sh
|
||||
```
|
||||
|
||||
2. 设置 crontab 自动清理:
|
||||
```bash
|
||||
crontab -e
|
||||
# 添加: 0 3 * * 0 ~/.config/gitea/cleanup-cache.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 诊断工具
|
||||
|
||||
### 快速诊断脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
echo "=== Gitea 环境诊断 ==="
|
||||
echo ""
|
||||
|
||||
# 1. 配置文件
|
||||
echo "1. 配置文件:"
|
||||
config_file="$HOME/.config/gitea/config.env"
|
||||
if [ -f "$config_file" ]; then
|
||||
echo " ✓ 存在: $config_file"
|
||||
source "$config_file"
|
||||
echo " URL: $GITEA_URL"
|
||||
else
|
||||
echo " ✗ 不存在"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 2. Token 验证
|
||||
if [ -n "$GITEA_TOKEN" ]; then
|
||||
echo "2. Token 验证:"
|
||||
response=$(curl -s -w "\n%{http_code}" \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
"${GITEA_URL}/api/v1/user")
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
if [ "$http_code" = "200" ]; then
|
||||
echo " ✓ 有效"
|
||||
else
|
||||
echo " ✗ 无效 (HTTP $http_code)"
|
||||
fi
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# 3. Runner 状态
|
||||
echo "3. Runner 状态:"
|
||||
runners_dir="$HOME/.config/gitea/runners"
|
||||
if [ -d "$runners_dir" ]; then
|
||||
runner_count=$(ls -1 "$runners_dir" 2>/dev/null | wc -l | tr -d ' ')
|
||||
echo " 配置数量: $runner_count"
|
||||
|
||||
for runner in $(ls -1 "$runners_dir" 2>/dev/null); do
|
||||
config_file="$runners_dir/$runner/config.yaml"
|
||||
if pgrep -f "act_runner daemon --config $config_file" > /dev/null; then
|
||||
echo " ✓ $runner (运行中)"
|
||||
else
|
||||
echo " ✗ $runner (已停止)"
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo " 未配置 Runner"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 4. 工具检查
|
||||
echo "4. 工具检查:"
|
||||
for tool in act_runner jq curl git; do
|
||||
if command -v $tool &> /dev/null; then
|
||||
echo " ✓ $tool"
|
||||
else
|
||||
echo " ✗ $tool (未安装)"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
保存为 `~/.config/gitea/diagnose.sh` 并执行:
|
||||
|
||||
```bash
|
||||
chmod +x ~/.config/gitea/diagnose.sh
|
||||
~/.config/gitea/diagnose.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 获取帮助
|
||||
|
||||
如果问题仍未解决:
|
||||
|
||||
1. **查看日志**:
|
||||
- Runner 日志:`~/.config/gitea/runners/runner-name/runner.log`
|
||||
- Gitea UI 中的 Workflow 运行日志
|
||||
|
||||
2. **检查文档**:
|
||||
- [环境配置](./setup-guide.md)
|
||||
- [Runner 管理](./runner-management.md)
|
||||
- [API 参考](./api-reference.md)
|
||||
|
||||
3. **联系支持**:
|
||||
- Gitea 官方文档:https://docs.gitea.com/
|
||||
- Gitea 社区论坛:https://discourse.gitea.io/
|
||||
|
||||
---
|
||||
|
||||
## 版本
|
||||
|
||||
- **文档版本**: 1.0
|
||||
- **最后更新**: 2026-01-12
|
||||
Reference in New Issue
Block a user