这两周负责将公司仓库从Github换到Gitlab
安装Gitlab
推荐使用官方推荐的Omnibus package安装
最先在自己的服务器上装,总是会出现502问题,找了各种资料最后感觉这篇文章讲得比较好
原因可能是系统内存不足,无法分配足够内存,导致启动失败,这种情况只能升级服务器配置来解决。
所以在公司的AWS上开了台4g内存的装上就可以了。。。。
附:Gitlab命令
配置
关闭服务器上所有无关的端口
起始用户名:root, 密码:5iveL!fe
因为是公司自己用,所以关闭注册,全部采取邀请注册机制
-
创建项目的时候切记关闭Gitlab CI!(Gitlab新版本默认开启CI,如果没配置又没关闭会出现一个关不掉的表示CI正在运行的图标,应该是Gitlab的小bug)
Edit Project --> Repository --> Build --> Disabled
配置Jenkins
- Jenkins安装Gitlab插件: Gitlab Hook Plugin & GitLab Plugin
- 新建一个job
- 源码管理部分选Git, Repository URL填入 git@gitlabXXXX.git
- 添加Credential,把Jenkins所在服务器的SSH填入到Gitlab用户中
- 选择分支 这一步有大坑,下面会讲到
- 源码库浏览器选择gitlab,填入url(http://gitlabxxxxxx)和版本
- 构建触发器里面勾选Build when a change is pushed to GitLab. GitLab CI Service URL: XXXXX, 到Gitlab项目中Webhook里面添加这个URL
- 添加自己项目需要的构建脚本
Branch Filter 大坑
上面第五步分支过滤,以前用Github在构建的时候在Git --> Branches to build --> Branch Specifier 里面填需要筛的分支即可比如 */staging
但是Gitlab由于用了Gitlab Plugin, 它有自己的一套过滤系统, 并且不走Jenkins自带的。
在Build when a change is pushed to GitLab. GitLab CI Service URL:XXXX (这个就是插件提供的)里面点开“高级”,可以看到Allowed branche的选项,选择Filter branches by regex 填入自己需要的分支,比如(.*master)
注意,这个地方的正则可能和大家平常写的有一点点区别,一定要看下帮助。
对于CI的流程自己的一些理解
- push 代码, Gitlab触发hook, 访问Jenkins提供的api
- Jenkins Branch Filter 系统判断自己需要处理的分支是否有改动,如果有开始构建
- 运行构建脚本
搬迁Github仓库至Gitlab
Git 拉下所有分支
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
参考资料:http://stackoverflow.com/questions/10312521/how-to-fetch-all-git-branches
更换remote源
git remote -v
git remote rm origin
git remote add origin git@XXXXXX
如何批量删除分支
本地
git branch |grep 'xxx' |xargs git branch -D
远端
git branch |grep 'xxx' |xargs git push origin --delete
参考资料:http://www.jianshu.com/p/3602f666799a
如何看分支数
git branch | wc -l
文件行数,从0开始计数:
wc -l
filenamewc -l a.txt
远端:
git ls-remote
git ls-remote | wc -l
上传
git push origin --all
/ git push -u origin master
之后 git push —all
/git push --all origin
Capistrano部署的坑
修改Capistrano里面部署的配置文件deploy.rb,将url从github改成gitlab源
不过即使是这样,最后发现部署时还是从github拿的代码
google了很久后找到了解决方案,需要删除repo这个文件夹(这个是Capistrano自己建的存放远端相关信息的文件夹)
参考资料:https://github.com/capistrano/capistrano/issues/1227
I remove directory repo, and it works with new repo
mv repo repo.bak
rm -rf repo
手动更改remote源
在部署和被部署的服务器上没有repo文件夹的地方,可能需要手动更改remote源,方法见上面的"更换remote源"
手动指定分支
上面更改了远端remote源的地方可能需要自己指定分支
git branch --set-upstream-to=origin/master master