310 lines
9.1 KiB
Plaintext
310 lines
9.1 KiB
Plaintext
================================================================================
|
||
Gerrit 问题解决方案文档
|
||
================================================================================
|
||
|
||
文档名称:Gerrit 登录和推送问题解决方案
|
||
创建日期:2025-12-15
|
||
适用版本:Gerrit 3.3.8
|
||
服务器地址:http://101.43.95.130:8080
|
||
|
||
================================================================================
|
||
一、登录问题解决方案
|
||
================================================================================
|
||
|
||
问题现象:
|
||
----------
|
||
- 点击 Account ID 登录后,界面仍然显示 "ANONYMOUS"(匿名用户)
|
||
- 服务器端登录成功(日志显示账户ID),但浏览器界面显示匿名
|
||
|
||
问题根源:
|
||
----------
|
||
这是浏览器的 Cookie 安全策略导致的。现代浏览器(Chrome/Edge/Firefox)对
|
||
Cookie 有严格的安全限制,特别是 SameSite 属性。
|
||
|
||
解决方案:
|
||
----------
|
||
|
||
【方案一】修改 Chrome 浏览器的 SameSite 标志(推荐)
|
||
|
||
1. 在 Chrome 地址栏输入:chrome://flags/
|
||
2. 在搜索框输入:SameSite
|
||
3. 找到以下选项并修改:
|
||
- "SameSite by default cookies" → 设置为 Disabled
|
||
- "Cookies without SameSite must be secure" → 设置为 Disabled
|
||
4. 点击右下角的"重新启动"按钮
|
||
5. 清除浏览器 Cookie(Ctrl+Shift+Delete,选择"所有时间",清除 Cookie)
|
||
6. 重新访问:http://101.43.95.130:8080
|
||
7. 点击 Account ID 登录
|
||
|
||
【方案二】修改 Firefox 浏览器的配置
|
||
|
||
1. 在 Firefox 地址栏输入:about:config
|
||
2. 点击"接受风险并继续"
|
||
3. 在搜索框输入:network.cookie.sameSite.noneRequiresSecure
|
||
4. 双击该选项,将值改为 false
|
||
5. 重启 Firefox
|
||
6. 清除浏览器 Cookie
|
||
7. 重新访问:http://101.43.95.130:8080
|
||
8. 点击 Account ID 登录
|
||
|
||
【方案三】服务器端配置(已完成)
|
||
|
||
服务器端已配置:
|
||
- cookieSecure = false(允许 HTTP 使用 Cookie)
|
||
- cookieSameSite = LAX(允许跨站 Cookie)
|
||
- canonicalWebUrl = http://101.43.95.130:8080/(正确的访问地址)
|
||
|
||
================================================================================
|
||
二、代码推送问题解决方案
|
||
================================================================================
|
||
|
||
问题现象:
|
||
----------
|
||
- HTTP 推送失败:remote: Unauthorized
|
||
- SSH 推送失败:Permission denied (publickey) 或 no mutual signature algorithm
|
||
|
||
问题根源:
|
||
----------
|
||
1. HTTP 认证:DEVELOPMENT_BECOME_ANY_ACCOUNT 模式对 HTTP Basic 认证支持有限
|
||
2. SSH 认证:OpenSSH 10.0 默认禁用了某些旧的签名算法(如 RSA-SHA1),
|
||
而 Gerrit 3.3.8 使用的 Apache SSHD 可能不支持新的签名算法
|
||
|
||
解决方案:
|
||
----------
|
||
|
||
【步骤一】配置 SSH 密钥
|
||
|
||
1. 生成 SSH 密钥(如果还没有):
|
||
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
|
||
|
||
2. 查看公钥内容:
|
||
cat ~/.ssh/id_rsa.pub
|
||
# Windows Git Bash 使用:
|
||
type ~/.ssh/id_rsa.pub
|
||
|
||
3. 将公钥添加到 Gerrit:
|
||
- 访问:http://101.43.95.130:8080/#/settings/ssh-keys
|
||
- 在 "New SSH key" 输入框中粘贴完整公钥
|
||
- 点击 "Add" 保存
|
||
|
||
【步骤二】创建 SSH 配置文件(解决签名算法问题)
|
||
|
||
在本地电脑上创建 SSH 配置文件:
|
||
|
||
1. 创建配置文件:
|
||
mkdir -p ~/.ssh
|
||
cat > ~/.ssh/config << 'EOF'
|
||
Host 101.43.95.130
|
||
Port 29418
|
||
PubkeyAcceptedKeyTypes +ssh-rsa
|
||
PubkeyAcceptedAlgorithms +ssh-rsa
|
||
EOF
|
||
|
||
2. 设置正确的权限:
|
||
chmod 600 ~/.ssh/config
|
||
|
||
3. 验证配置:
|
||
cat ~/.ssh/config
|
||
|
||
【步骤三】测试 SSH 连接
|
||
|
||
ssh -p 29418 renjianbo@101.43.95.130 gerrit version
|
||
|
||
如果成功,会显示:gerrit version 3.3.8
|
||
|
||
【步骤四】配置 Git 使用 SSH
|
||
|
||
1. 删除 HTTP 远程仓库:
|
||
git remote remove origin
|
||
|
||
2. 添加 SSH 远程仓库:
|
||
git remote add origin ssh://renjianbo@101.43.95.130:29418/test-project
|
||
|
||
3. 验证远程仓库配置:
|
||
git remote -v
|
||
|
||
【步骤五】注册邮箱地址
|
||
|
||
1. 访问:http://101.43.95.130:8080/#/settings/email-addresses
|
||
2. 在 "New Email Address" 输入框中输入您的邮箱地址
|
||
3. 点击 "Add" 按钮
|
||
4. 如果需要验证,按提示完成验证
|
||
|
||
【步骤六】安装 commit-msg hook(添加 Change-Id)
|
||
|
||
1. 下载 commit-msg hook:
|
||
cd /d/ttt/test-project
|
||
mkdir -p .git/hooks
|
||
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg
|
||
chmod +x .git/hooks/commit-msg
|
||
|
||
2. 修改最后一次提交(添加 Change-Id):
|
||
git commit --amend --no-edit
|
||
|
||
【步骤七】推送代码
|
||
|
||
git push origin HEAD:refs/for/master
|
||
|
||
推送成功后,Gerrit 会返回变更 URL,例如:
|
||
remote: http://101.43.95.130:8080/c/test-project/+/1 [NEW]
|
||
|
||
================================================================================
|
||
三、防火墙配置(如果 SSH 连接超时)
|
||
================================================================================
|
||
|
||
如果 SSH 连接超时(Connection timed out),需要配置防火墙:
|
||
|
||
【云服务器】
|
||
|
||
1. 登录云控制台(阿里云、腾讯云等)
|
||
2. 找到安全组配置
|
||
3. 添加入站规则:
|
||
- 协议:TCP
|
||
- 端口:29418
|
||
- 源:0.0.0.0/0(或您的 IP)
|
||
4. 保存规则
|
||
|
||
【本地服务器】
|
||
|
||
sudo firewall-cmd --permanent --add-port=29418/tcp
|
||
sudo firewall-cmd --reload
|
||
sudo firewall-cmd --list-ports | grep 29418
|
||
|
||
================================================================================
|
||
四、完整操作流程示例
|
||
================================================================================
|
||
|
||
【首次设置】
|
||
|
||
1. 配置 SSH 密钥和配置文件(见上述步骤一、二)
|
||
|
||
2. 克隆项目:
|
||
git clone ssh://renjianbo@101.43.95.130:29418/test-project
|
||
cd test-project
|
||
|
||
3. 安装 commit-msg hook:
|
||
mkdir -p .git/hooks
|
||
curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg
|
||
chmod +x .git/hooks/commit-msg
|
||
|
||
4. 配置 Git 用户信息:
|
||
git config user.name "Your Name"
|
||
git config user.email "your_email@example.com"
|
||
|
||
【日常开发流程】
|
||
|
||
1. 修改代码
|
||
2. 提交代码:
|
||
git add .
|
||
git commit -m "Your commit message"
|
||
3. 推送代码评审:
|
||
git push origin HEAD:refs/for/master
|
||
4. 在 Gerrit Web 界面进行评审
|
||
5. 如果有修改意见,修改后重新推送:
|
||
git commit --amend
|
||
git push origin HEAD:refs/for/master
|
||
6. 合并后,更新本地仓库:
|
||
git checkout master
|
||
git pull origin master
|
||
|
||
================================================================================
|
||
五、常见问题排查
|
||
================================================================================
|
||
|
||
【问题1】SSH 连接超时
|
||
|
||
检查项:
|
||
- 防火墙是否开放 29418 端口
|
||
- 云服务器安全组是否配置正确
|
||
- Gerrit SSH 服务是否运行:bin/gerrit.sh status
|
||
|
||
【问题2】SSH 认证失败(Permission denied)
|
||
|
||
检查项:
|
||
- 公钥是否已添加到 Gerrit
|
||
- SSH 配置文件是否正确
|
||
- 用户名是否正确(Settings → Profile)
|
||
|
||
【问题3】缺少 Change-Id
|
||
|
||
解决:
|
||
- 安装 commit-msg hook(见步骤六)
|
||
- 使用 git commit --amend --no-edit 修改提交
|
||
|
||
【问题4】邮箱地址未注册
|
||
|
||
解决:
|
||
- 访问 Settings → Email Addresses
|
||
- 添加您的邮箱地址
|
||
|
||
【问题5】HTTP 推送失败
|
||
|
||
解决:
|
||
- 使用 SSH 方式推送(推荐)
|
||
- 或配置 gitBasicAuth = true(服务器端已配置)
|
||
|
||
================================================================================
|
||
六、服务器端配置摘要
|
||
================================================================================
|
||
|
||
当前服务器配置(/home/renjianbo/gerrit_install/review_site/etc/gerrit.config):
|
||
|
||
[gerrit]
|
||
basePath = git
|
||
canonicalWebUrl = http://101.43.95.130:8080/
|
||
serverId = fab2bec9-a17c-434d-9a25-76a7f2675339
|
||
|
||
[database]
|
||
type = h2
|
||
database = db/ReviewDB
|
||
|
||
[auth]
|
||
type = DEVELOPMENT_BECOME_ANY_ACCOUNT
|
||
gitBasicAuth = true
|
||
|
||
[sshd]
|
||
listenAddress = *:29418
|
||
|
||
[httpd]
|
||
listenUrl = http://*:8080/
|
||
cookieSecure = false
|
||
cookieSameSite = LAX
|
||
cookiePath = /
|
||
|
||
[cache]
|
||
directory = cache
|
||
|
||
[index]
|
||
type = LUCENE
|
||
|
||
[receive]
|
||
enableSignedPush = false
|
||
|
||
================================================================================
|
||
七、重要提示
|
||
================================================================================
|
||
|
||
1. SSH 方式比 HTTP 更可靠,强烈推荐使用 SSH 推送代码
|
||
|
||
2. 安装 commit-msg hook 后,以后的所有提交都会自动包含 Change-Id
|
||
|
||
3. 创建 SSH 配置文件后,以后可以直接使用 git push,不需要每次都
|
||
输入长命令
|
||
|
||
4. 如果遇到问题,查看服务器日志:
|
||
cd /home/renjianbo/gerrit_install/review_site
|
||
tail -f logs/httpd_log
|
||
tail -f logs/sshd_log
|
||
|
||
5. 常用链接:
|
||
- Gerrit 主页:http://101.43.95.130:8080
|
||
- 所有变更:http://101.43.95.130:8080/#/q/status:open
|
||
- 我的变更:http://101.43.95.130:8080/#/q/owner:renjianbo
|
||
- SSH Keys:http://101.43.95.130:8080/#/settings/ssh-keys
|
||
- Email 地址:http://101.43.95.130:8080/#/settings/email-addresses
|
||
|
||
================================================================================
|
||
文档结束
|
||
================================================================================
|
||
|