基於Docker快速搭建Gitlab與Gitlab CI/CD服務
此文件基於現有專案執行實踐整理,其中包含了許多Gitlab、CI/CD相關概念,閱讀需要有一定的Gitlab、Docker、CI/CD基礎知識。
此專案能做什麼
- 分享一些關於團隊Git版本控制使用心得。
- 提供一份Docker版本的Gtilab私有化倉庫應用實現,讓你在開發團隊內部快速構建一套Git託管倉庫系統。
- 提供一份Gitlab Docker容器編排實現參考,分離Gitlab/Redis/PostgreSQL/Gitlab-CI和執行時資料。
- 提供一份Gitlab Runner Docker版本實現,在Runner容器內部增加了對PHP的支援,利用Laravel Envoy實現遠端操作多臺主機,實現分散式自動構建與交付。
- 加深對軟體從編碼 =》 構建 =》 測試 =》 部署的整個生命週期的認知,
- 為Web/Web API型別網際網路產品自動化提供參考,適合中小型創業研發團隊快速迭代版本。
Git Flow / Github Flow /Gitlab Flow Git工作流
Git團隊開發中,大家都在向倉庫中提交功能程式碼,時間久了,分支與版本就逐漸增多而變得複雜,因此,一個合理的版本管理流程在專案初期就非常重要。
使用Git,多數時候推薦流行的git-flow工作流程 git-flow 備忘清單。通常,develop分支作為測試版本使用,所有開發者都能夠向該分支合併程式碼,以保證程式碼經過評審和功能驗證。master分支作為線上版本使用,只有倉庫管理員才能向該分支合併程式碼,以確保線上版本穩定。
- feature branches 功能特性分支,基於develop分支開發,在功能開發完成後,程式碼會被合併到develop分支,此分支也自動刪除。
- develop 測試分支,一般基於該分支構建應用的測試環境。
- release branches 釋出分支。新功能開發完成,經過了程式碼評審和功能驗證後,倉庫管理員使用
git flow release start 1.0.0
命令方式合併develop分支到master分支。使用該命令,需要確保master分支與develop分支基礎版本一致。 - hotfixes 修復分支,一般而言,線上上環境出現問題,需要緊急修復時,需建立hotfix修復補丁分支,它基於master分支開發,補丁修復程式碼會被合併至master與develop分支。
- master 生產分支,一般基於該分支中構建應用的生產環境。
在單人Git開發場景下,此流程足以滿足需求,但是在多人的開發團隊中,有時候稍顯"無力",而Gitlab/Github推薦使用PR/MR的方式,開發者需要主動發起分支合併申請,在得到確認後,分支開發才算完成。
開發者基於主幹分支先建立新的功能性分支,在功能開發完成後,需要作Merge Request申請,也即是主動請求合併功能分支程式碼到主幹分支。倉庫管理員會評審每一次MR,只有評審通過,新功能才被提交上線。
快速執行Gitlab
Gitlab提供社群與企業版本,官網提供多種Gitlab安裝方式。此專案是基於Docker版本的Gitlab實現,開發者無需更多關心Gitlab安裝過程,Docker映象已做好了環境和依賴,只需要一臺*Unix機器,並安裝Docker,可以放心安裝和解除安裝。
該專案基於Docker GitLab 映象構建,它將Gitlab/PostgreSQL/Redis容器進行了分離,更友好的理解其執行依賴,組織結構等內容,提供一套容器編排配置參考,支援Docker Compose快速構建與維護。
執行以下命令,確保你的主機已經安裝好了Docker與Docke-Compose。
-
克隆倉庫
$ git clone https://github.com/bravist/gitlab-docker $ cd ~/gitlab-docker 複製程式碼
-
配置環境變數,推薦使用預設配置
$ cp .env.example .env 複製程式碼
-
使用
docker-compose
自動構建映象和啟動容器$ docker-compose build && docker-compose up -d 複製程式碼
-
檢視容器並訪問Gitlab Web控制檯
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8827363f45d8 sameersbn/gitlab:10.3.3 "/sbin/entrypoint.sh…" 4 seconds ago Up 4 seconds 443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp gitlabdocker_gitlab_1 db0dd3b3d23f bravist/gitlab-ci-php-envoy:1.0 "/usr/bin/dumb-init …" 7 seconds ago Up 6 seconds gitlab-ci-php-envoy-runner f598844c561c sameersbn/redis:latest "/sbin/entrypoint.sh…" 7 seconds ago Up 6 seconds 6379/tcp gitlab-redis 73d93b7cd110 sameersbn/postgresql:9.6-2 "/sbin/entrypoint.sh" 7 seconds ago Up 5 seconds 0.0.0.0:5432->5432/tcp gitlab-postgresql 複製程式碼