1. 程式人生 > >用gitlabCI快速搭建一個GitServer與CI

用gitlabCI快速搭建一個GitServer與CI

一般的公司一般都有一個或者多箇中央Git Server,託管著所有專案程式碼;同時當一個專案很大,由許多個工程組成,例如Tizen和Android,那麼一般還有Continuous Integration(CI)在有人push程式碼到工程時編譯整個專案,編譯出錯一般CI會發郵件給提交者和管理者,從而可以及時修正錯誤。

Git Server安裝與使用

Git server很多,列舉一部分:

WINDOWS

  • GitStack:免費版只能有兩個賬號

LINUX

  • GitLab
  • Git-Deamon
  • Git使用-bare生成

獲取與安裝

這裡使用gitlab,到這裡下載bitnami gitlab一鍵安裝包

。安裝非常簡單,只需要新增可執行許可權然後用sudo ./XXX.run 執行即出現圖形化的安裝嚮導。在安裝過程中需要設定使用者名稱和密碼用於後面配置使用。

gitlab的使用

直接用IP地址或者網址登陸即可。例如:http://192.168.1.120,要求使用者名稱和密碼時使用安裝時輸入的使用者名稱和密碼。

檢查狀態:

$ sudo /home/git/gitlab-shell/bin/check 
Check GitLab API access: OK
Check directories and files: 
    /opt/gitlab-6.3.0-0/apps/gitlab/repositories: OK
    /home/git/.ssh/authorized_keys: OK
    /opt/gitlab-6.3.0-0/redis/bin/redis-cli: OK

從上面可以看到repository的位置/opt/gitlab-6.3.0-0/apps/gitlab/repositories。既然知道了repository在哪,那麼我們就可以匯入repo了。

Repository的匯入

什麼時候需要匯入REPOSITORY?

以前要想sync下Android的整個程式碼,需要極長的時間,現在要想repo sync下Tizen的程式碼,在國內一般會比較困難,經常出現unexpected hang之類的錯誤,就算寫個sync的指令碼不斷的去sync結果也很可能是好幾天都無法sync成功。除此之外,我們很可能需要更改程式碼,而這個程式碼很可能並不願意push到Tizen Gerrit去,這個時候,很可能就需要自己搭建一個本地的repository供開發人員使用。

如何匯入一個遠端倉庫

第一步:在本地生成一個BARE倉庫
git clone --bare PathofGitReop.git XXXX.git
第二步:拷貝BARE REPOSITORY到GITLAB的REPOSITORIES中
cp XXX.git /opt/gitlab-6.3.0-0/apps/gitlab/repositories/
第三步:使用
bundle exec rake gitlab:import:repos RAILS_ENV=production

另外還可以在新建project

improt

將repo切換到其他地方

讓gitlab同步其他repository 參考stackoverflow上的這個問題回答

#如何匯入一個本地的CLONE程式碼

有一個.git的git clone目錄,就是一個repository,因此可以從這個repository clone程式碼。

git clone [email protected]://IP Address/Path to the Git clone dir 
git clone [email protected]:hexiongjun/uboot-imx.git
git remote add origin [email protected]:hexiongjun/test.git
git remote rm origin

如何匯入一個本地的用git clone --mirror產生的bare倉庫

git remote rm origin    
git remote add origin [email protected]:user/XXX.git
git push -u origin master 
git push -u origin otherbranch

當然也可以完全不用這麼麻煩,因為.git目錄就是bare repository。所以也可以直接將這個copy過去。

注意就現在這個版本(6.3.0),gitlab還不支援匯入git協議的reop。

持續整合(Continues Integration)

持續整合(△2),是一個在有人提交檔案後對整個project不斷編譯構建的系統。Jenkins是比較有名的持續整合系統,Gitlab也有一個CI。在安裝的時候就預設會選擇上。 在安裝完成後可以進入到:http://IP or Hostname/githubci即可進入整合系統的管理web。

新增許可權

gitlab ci安裝好後會建立一個叫做gitlab_ci的使用者,ci要build gitlab中的專案第一不就是從gitlab中取一個專案,gitlab_ci使用者需要有獲取project的許可權。將/home/gitlab_ci/.ssh/id_rsa.pub中的內容複製貼上到需要被ci 新增的專案中。

ssh

編譯配置

在編譯指令碼中如果需要配置環境變數,那麼就需要注意了,如下圖,因為build scripts中的每一行都是在一個單獨的sh環境中執行,因此,需要將多條命令用&&整合成一條。另外在側邊可以輸入branch分支。

另外還有一點,在現在這個gitlabCI版本中,scripts中是不允許空行的。否則會出現Diretory not found的錯誤提示,參考這裡。 buildconfig

點選此頁面可以跳到對應的CI中。

如果編譯出錯,那麼還可以retry,先跳轉到Builds頁面:

buildsummary

然後再右側有一個Retry按鈕:

buildretry

對應的編譯log就在此頁面中。而在gitlab對應的專案網頁中,頁面右側將有一個build success的圖片:

sucess

新新增project到CI

在新新增任務到CI中後,需要為其分配runner來編譯,點選下面圖中Token,切換到這個runner。

然後enable剛才新新增的專案。然後再對這個runner assign to all 即可。

sucess

參考:

△2:CI

△4: bitnami還提供其他許多軟體的一鍵安裝包,例如LAMP RedMine等等。

轉載請註明出處。作者:TonyHo hexiongjun.com