『壹』 搭建GitLab伺服器
GitLab是GitHub的免費私有庫替代方案,並且安裝與配置都很方便。
GitLab要求最少4GB內存,支持小團隊使用沒問題,實測2GB內存的VPS基本沒法用,開swapfile也不行,動不動就60秒超時。因此4GB內存是必須的。
關於這一點,內存大戶主要是Unicorn,基於ruby的http伺服器。Unicorn會在啟動後預先佔用大部分內存,內存會隨著使用逐漸增長,並且不會釋放。根據GitLab和Unicorn的官方文檔,這不是它們的鍋,那麼這個鍋可能是ruby和rails了。解決方法是unicorn-work-kill,會根據請求次數和內存佔用自動重啟Unicorn。Omnibus版的GitLab是默認開啟的。
GitLab分為社區版和企業版,在未付費的情況下,兩者的功能是一樣的。並且社區版整合了CI/CD,因此可以滿足絕大部分的開發需求。
安裝包主要包括Omnibus整合包,Docker、AWS等的雲鏡像,以及一些第三方維護的版本。其中Omnibus直接整合了所有服務端組件,適合自用和練手。
安裝以Omnibus整合包為例,操作系統為Ubuntu16.04。
Gitlab需要 curl,openSSH 和 ca-certificates 這幾個組件:
不過伺服器系統一般自帶,所以是可選的。
郵件服務,用於GitLab發送找回密碼的郵件:
不過如果伺服器沒有域名的話,大部分郵箱會拒收郵件,而管理員帳號可以直接重置其他賬號的密碼,所以是可選的。
官方提供的腳本:
這個腳本會自動添加源到apt 的source list,以及安全key。另外,如果自己伺服器在國內,腳本會自動添加清華的鏡像,速度還行。
先更新apt緩存:
推薦使用 apt 而不是 apt-get ,前者大多數情況下更簡單一點。
然後是安裝:
其中 EXTERNAL_URL ,改成自己的域名。沒有域名的話,可以直接設置成IP的形式: http://1.2.3.4 ,這個推測跟nginx服務以及GitLab中的項目地址有關,所以最好正確設置。當然也可以之後在配置文件里更改。
安裝完成後,可以在配置文件中修改配置 /etc/gitlab/gitlab.rb 。
比如之前的 EXTERNAL_URL :
官方還有一個關於 unicorn 的優化建議:
默認值是2,如果伺服器只用於GitLab的話,官方建議是CPU核心數加一,可以提高伺服器的響應速度。不過如果內存只有4G,或者伺服器同時承載其他服務,就不要改了,以免內存不足。另外,這個參數最小值是2,設為1,伺服器可能會卡死。
配置完成後,刷新配置:
每次修改完 gitlab.rb ,都要刷新配置。
如果沒有報錯的話,GitLab就配置完畢並且正常運行了。接下來可以打開瀏覽器開始訪問了。
『貳』 一般公司或者團隊是怎麼進行代碼開發並且部署到伺服器上的
廢話不多說,直接來乾的。這里介紹一套成熟的方案。
gitlab(代碼管理)+jenkins(持續集成)+k8s(服務管理)
其中涉及到的技術細節:dockerindockermakefile
gitlab使用介紹
gitlab是一款類似github的開源代碼管理軟體,可在公司內網,直接搭建一套私有代碼倉庫,適合團隊多人開發,具有完善的分支管理、角色管理、issue、里程碑等。是非常優秀的一款軟體。
jeknis使用介紹
這是一款開源持續集成軟體,說人話就是使用他可以自動化部署服務。其具有gitlab相關的插件,安裝後可直接對接gitlab,當gitlab發生push或者merge代碼事件,會通知jeknis去完成最新推送的代碼的鏡像構建和部署。
推薦上面說的兩款技術和jeknis混合使用。
1.dockerindocker技術。顧名思義就是docker裡面運行docker,簡單點直接用dockerfile在jeknis鏡像的基礎上安裝docker客戶端或者k8s客戶端。這樣我們孫搭薯在容器中就可以直接調用宿主機的docker命令或者k8s命令。這對我們使用jenkins執行部署腳本,通知k8s或者docker部署服務,非常方便。
2.makefile之所以介紹這款他,是因為其具有一個絕佳的功能,可以檢測文件內容是否發生變化,這樣對於微服務架構,其配合jenkins,無需指定什麼,就可以部署上發生文件變化的微服務。而不會影響到其他服枝碧務。
k8s使用介紹
這款當紅炸子雞?,相信大家耳聞已久。其實現了對docker的管理和編排。配合上共享存儲和其服務自動重則者啟機制,可以讓我們的服務無當機。
對於docker內部服務的暴露推薦ingress+service.
docker鏡像管理推薦harbor。
以上完整的自動化開發部署環境,有興趣的可以自行學習相關內容,進行搭建測試。