基於Docker快速搭建Gitlab與Gitlab CI/CD服務

會勇發表於2018-03-08

基於Docker快速搭建Gitlab與Gitlab CI/CD服務

此文件基於現有專案執行實踐整理,其中包含了許多Gitlab、CI/CD相關概念,閱讀需要有一定的Gitlab、Docker、CI/CD基礎知識。

更多參考:github.com/bravist/git…

此專案能做什麼

  1. 分享一些關於團隊Git版本控制使用心得。
  2. 提供一份Docker版本的Gtilab私有化倉庫應用實現,讓你在開發團隊內部快速構建一套Git託管倉庫系統。
  3. 提供一份Gitlab Docker容器編排實現參考,分離Gitlab/Redis/PostgreSQL/Gitlab-CI和執行時資料。
  4. 提供一份Gitlab Runner Docker版本實現,在Runner容器內部增加了對PHP的支援,利用Laravel Envoy實現遠端操作多臺主機,實現分散式自動構建與交付。
  5. 加深對軟體從編碼 =》 構建 =》 測試 =》 部署的整個生命週期的認知,
  6. 為Web/Web API型別網際網路產品自動化提供參考,適合中小型創業研發團隊快速迭代版本。

Git Flow / Github Flow /Gitlab Flow Git工作流

Git團隊開發中,大家都在向倉庫中提交功能程式碼,時間久了,分支與版本就逐漸增多而變得複雜,因此,一個合理的版本管理流程在專案初期就非常重要。

使用Git,多數時候推薦流行的git-flow工作流程 git-flow 備忘清單。通常,develop分支作為測試版本使用,所有開發者都能夠向該分支合併程式碼,以保證程式碼經過評審和功能驗證。master分支作為線上版本使用,只有倉庫管理員才能向該分支合併程式碼,以確保線上版本穩定。

基於Docker快速搭建Gitlab與Gitlab CI/CD服務

  • feature branches 功能特性分支,基於develop分支開發,在功能開發完成後,程式碼會被合併到develop分支,此分支也自動刪除。
  • develop 測試分支,一般基於該分支構建應用的測試環境。
  • release branches 釋出分支。新功能開發完成,經過了程式碼評審和功能驗證後,倉庫管理員使用git flow release start 1.0.0 命令方式合併develop分支到master分支。使用該命令,需要確保master分支與develop分支基礎版本一致。
  • hotfixes 修復分支,一般而言,線上上環境出現問題,需要緊急修復時,需建立hotfix修復補丁分支,它基於master分支開發,補丁修復程式碼會被合併至master與develop分支。
  • master 生產分支,一般基於該分支中構建應用的生產環境。

基於Docker快速搭建Gitlab與Gitlab CI/CD服務

在單人Git開發場景下,此流程足以滿足需求,但是在多人的開發團隊中,有時候稍顯"無力",而Gitlab/Github推薦使用PR/MR的方式,開發者需要主動發起分支合併申請,在得到確認後,分支開發才算完成。

開發者基於主幹分支先建立新的功能性分支,在功能開發完成後,需要作Merge Request申請,也即是主動請求合併功能分支程式碼到主幹分支。倉庫管理員會評審每一次MR,只有評審通過,新功能才被提交上線。

基於Docker快速搭建Gitlab與Gitlab CI/CD服務

快速執行Gitlab

Gitlab提供社群與企業版本,官網提供多種Gitlab安裝方式。此專案是基於Docker版本的Gitlab實現,開發者無需更多關心Gitlab安裝過程,Docker映象已做好了環境和依賴,只需要一臺*Unix機器,並安裝Docker,可以放心安裝和解除安裝。

該專案基於Docker GitLab 映象構建,它將Gitlab/PostgreSQL/Redis容器進行了分離,更友好的理解其執行依賴,組織結構等內容,提供一套容器編排配置參考,支援Docker Compose快速構建與維護。

執行以下命令,確保你的主機已經安裝好了Docker與Docke-Compose。

  1. 克隆倉庫

    $ git clone https://github.com/bravist/gitlab-docker
    $ cd ~/gitlab-docker
    複製程式碼
  2. 配置環境變數,推薦使用預設配置

    $ cp .env.example .env
    複製程式碼
  3. 使用docker-compose 自動構建映象和啟動容器

    $ docker-compose build && docker-compose up -d
    複製程式碼
  4. 檢視容器並訪問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
    複製程式碼

更多參考:github.com/bravist/git…

相關文章