将GitLab 2.9.1 升级到 5.0

2013-04-09 15:36:08 +08:00
 cheka
此前的2.9.1不知为什么在界面添加ssh-key总是不能起效, 加一个用户或者key总是要在$HOME/.ssh/, gitolite-admin 里进行配置, 非常麻烦。

Gitlab 5.0 不再依赖gitolite, 所以昨天下决心升级。

安装过程基本参照官方文档
https://github.com/gitlabhq/gitlabhq/blob/5-0-stable/doc/install/installation.md

但是升级过程中形形色色的问题, 折腾了很久才搞定, 这里把一些容易出问题的地方列出, 供有需要的各位参考:

1. 因为Gitlab5.0 不再支持SQLite, 因此升级Gitlab之前, 需要先将数据库从 SQLite3 迁移到MySQL, 大体步骤是
1) 从SQLite里dump出数据
2) 编辑gitlab的数据库配置文件, 设成MySQL
3) 将数据导入MySQL
参考这个链接
https://wiki.archlinux.org/index.php/Gitlab#Migrate_from_sqlite_to_mysql

2. 安装升级完Gitlab5.0 之后, 运行如下命令进行配置检查
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
结果会列出所有有问题的地方, 以及给出修正提示。 按照提示更新数据库的scheme

3. 反复运行上述检查, 务必确保没有问题之后, 可以访问gitlab, 但是持续显示404。 因为不怎么会ruby和rails,这个问题折腾了我好久,几乎要放弃,后来发现gitlab所用数据库 gitlabhq_production的users表里有两个字段name和username, 其中name是之前的用户名数据, 而username全部为NULL, 于是执行如下SQL
"update users set username=name;"

然后就可以正常访问gitlab了 -_-||

4. 如果发现在gitlab界面上添加的ssh-key不生效, 可以到admin的Background Jobs里看看有没有相应的jobs, 以及有没有活动的sidekiq worker, 因为多半是sidekiq没有启动。

5. 最好通过最新的gitlab界面重新添加一下各个用户的ssh-key, 然后把服务器上git用户的authorized_keys里使用gitolite-shell的条目都删除。

6. 此时代码应该可以pull, 但是push的时候会报一些hook的问题失败, 原因是repositories中每个项目的hooks目录里会有一个链到.gitolite的update脚本的软链接, 每次push代码的时候都会被调用, 因为gitolite已经不再使用, 所以直接将所有项目目录里这个软链接删除即可。
6732 次点击
所在节点    程序员
17 条回复
lookhi
2013-04-09 15:53:10 +08:00
虽不觉但明厉 你懂的
techzhou
2013-04-09 16:23:24 +08:00
我也是加key不生效 要自己运行update_keys任务 5.0终于说Recommended了么
cheka
2013-04-09 16:49:21 +08:00
@techzhou 多半是sidekiq没有运行, 你到background jobs里查看一下。 我现在只要在web界面增加key 就可以了, 无需手动执行任何脚本。
glancesx
2013-04-09 17:09:52 +08:00
这东西赶上了chrome的升级速度了
cheka
2013-04-09 17:19:03 +08:00
@techzhou 可以用这段命令运行sidekiq
sudo -u git -H bundle exec rake sidekiq:start RAILS_ENV=production
flycn1985
2013-04-09 17:51:34 +08:00
一转眼。。已经5.x了
fly2never
2013-04-09 19:31:15 +08:00
小团队用atlassian stash吧,省心
ljbha007
2013-04-09 20:29:27 +08:00
真够折腾的
adow
2013-04-09 21:45:45 +08:00
之前刚装好没多久就看到说5.0出来了,好纠结不知道要不要升级啊
cngithub
2013-04-09 22:39:36 +08:00
个人还是觉得有点奇怪。小团队为什么不购买个github的服务?也不贵吧?

未来维护这类配置与服务的时间,其实挺浪费时间的。
cheka
2013-04-10 00:32:42 +08:00
@cngithub 照常理购买服务绝对是更合理的选择,实际上我司两年半前就是unfuddle的付费用户,但是后来unfuddle被墙(准确的说是Amazon EC2被墙),一堆人坐在那里无法无法提交代码(那时候用的是Svn)。

后来就下决心自己维护了,难说github什么时候也会被墙。

----哦, 已经墙过了。
chloerei
2013-04-10 00:36:54 +08:00
@cheka VPN
allenhsu
2013-04-10 00:57:44 +08:00
key 不能自动加入也可能是文件权限问题?
cyfdecyf
2013-04-10 10:16:33 +08:00
@cheka 之前一直在用 gitolite,昨天部署 gitlab 也遇到 web 加 ssh key 失败的问题,谢谢提醒,起了 sidekiq 之后都正常了。

@cngithub 我是放在学校实验室用,之前 gitolite 已经 65 个 repo 了,买 github 的收费版对我们来说太贵了。
goinaction
2013-04-10 23:43:41 +08:00
我装了GitLab后,nginx转发的时候经常被GitLab拒绝连接,总是要重试很多次,看日志是worker timeout,不知道是哪儿配置有问题
cngithub
2013-04-11 13:27:28 +08:00
@cyfdecyf 真不错,累计repo也太多了吧:D
sharp
2013-04-25 17:06:19 +08:00
这里竟然有这个帖子, 也可以这样解决 username为空 https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide

RAILS_ENV=production bundle exec rails console

User.where(:username => nil).each { |u| u.username = u.email.sub(/@.+/, ''); u.save! }

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/65379

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX