這兩周負責將公司倉庫從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.lxweimin.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