使用Docker 建置 GitLab CI

最近有需求在Mac環境中,使用Docker建置Gitlab的開發環境與CI /CD , 所以記錄一下相關的步驟與細節,Gitlab是一個用Ruby on Rails 開發的開源項目,可以通過web 界面進行專案管理與測試。

使用Docker 佈署可以很容易進行安裝Gitlab與版本管理。

安裝Docker Desktop

https://docs.docker.com/docker-for-mac/install/

  • 點擊Docker.app進行安裝

啟動後會提示您使用系統密碼授權Docker.app。 需要特權訪問才能安裝網絡組件和Docker應用程序的鏈接。

頂部狀態欄中的Docker菜單表示Docker Desktop正在運行,並且可以從終端進行訪問。

如果您剛剛安裝了該應用程序,則還會收到一條消息,其中包含建議的後續步驟以及指向文檔的鏈接。 單擊Docker menu以消除此彈出通知。

  • 開啟Teminal 確認docker 指令可以正常
$ docker -v

下載Gitlab image

$ docker pull gitlab/gitlab-ce

https://docs.gitlab.com/omnibus/docker/

建立Gitlab Container

$   sudo docker run -d \
    --hostname xxxx.xxxx.xx \
    --name gitlab \
    --restart always \
    --publish 30001:22 --publish 30000:80 --publish 30002:443 \
    --volume ~/gitlab/data:/var/opt/gitlab \
    --volume ~/gitlab/logs:/var/log/gitlab \
    --volume ~/gitlab/config:/etc/gitlab \
    gitlab/gitlab-ce
  • hostname 建立gitlab 的位置可使用domain or ip
  • name container 名稱
  • restart 設定為docker 服務啟動後自動重啟
  • publish 將主機的30000, 30001, 30002 對應到 80, 22, 443
  • volume 將gitlab 的檔案對應到實體主機的路徑,container 刪除後重建與更新後不影響系統資料

修改gitlab.rb 文件

因為已經有把gitlab.rb 文件對應到 ~/gitlab/config

$ vi ~/gitlab/config/gitlab.rb

修改的內容如下:

  • external_url ‘http://hostname:30000
  • gitlab_rails[‘gitlab_ssh_host’] = ‘hostname’
  • gitlab_rails[‘gitlab_shell_ssh_port’] = 30001
  • nginx[‘listen_port’] = 80

修改email 的配置

一樣在gitlab.rb 中增加smtp的配置

gitlab_rails[‘gitlab_email_from’] = “xxxx@163.com”  
gitlab_rails[‘gitlab_email_reply_to’] = ‘xxxx@163.com‘  
gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “smtp.163.com
gitlab_rails[‘smtp_port’] = 465 
gitlab_rails[‘smtp_user_name’] = “xxxx@163.com”  
gitlab_rails[‘smtp_password’] = “xxxxpassword”   gitlab_rails[‘smtp_domain’] = “163.com”   gitlab_rails[‘smtp_authentication’] = “login”          gitlab_rails[‘smtp_enable_starttls_auto’] = true 
gitlab_rails[‘smtp_tls’] =true    gitlab_rails[‘smtp_openssl_verify_mode’] = “peer” 

重啟gitlab service

$ sudo docker exec -it gitlab /bin/bash
$ gitlab-ctl reconfigure