GitLab 安裝、管理、運維

Thobian發表於2019-09-08

服務安裝

gitlab有點吃效能,官方推薦最低配置:2核8G(可以服務100個使用者),具體的硬體要求可以看:https://docs.gitlab.com/ee/install/require...

centos下具體的安裝步驟可以參考:https://about.gitlab.com/install/#centos-6

拋去前置環境的話,就兩條命令:

# 安裝源
$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

# 企業版可以指定**EXTERNAL_URL**引數,社群版應該也行。EXTERNAL_URL就是gitlab的訪問連結
$ yum install gitlab-ce 

管理維護

配置檔案:

/etc/gitlab/gitlab.rb 

啟動:

# 剛安裝上,可能要修改下配置等  修改完配置讓其生效的命令是
$ gitlab-ctl reconfigure

# gitlab本質是個服務(類似MySQL、Nginx這些),所以他還有一種啟動方式是
# 名字不確定是否有差異,反正這裡可以找到: ls /lib/systemd/system/|grep gitlab 
$ systemctl start gitlab-runsvdir 

# 上面兩種方式都會預設都會把 gitlab 下面那一堆服務都拉起來,非常耗資源。如果想暫停某個功能
# 【重要】這種方式關閉只是臨時的,下次重啟還是會全部拉起。好像還沒辦法永久關閉,雖然gitlab.rb裡面有相關的配置,好像改完reconfigure之後繼續全部開啟
$ gitlab-ctl stop $serviceName

# gitlab-ctl 很強大,更多使用方法可以看他的help資訊

瘦身:

gitlab預設開啟了很多服務,並且配置還是按照 他們推薦硬體配置開啟的,所以如果是在自己電腦上玩,那個配置很不合適,非常耗資源,必須瘦身一下。

# 預設開的服務有
alertmanager            # 可以不開啟,看名字是通知告警有關,關閉後不影響主要功能
gitlab-monitor          # 可以不開啟,看名字是監控上報有關,關閉後不影響主要功能
grafana                 # 可以不開啟,不知道做啥的,好像是個外掛,關閉不影響主要功能
logrotate               # 可以不開啟,看名字是日誌切割有關,關閉後不影響主要功能
node-exporter           # 可以不開啟,估計是Node監控相關,關閉後不影響主要功能
postgres-exporter       # 可以不開啟,估計是postgres監控相關,關閉後不影響主要功能
redis-exporter          # 可以不開啟,估計是Redis監控相關,關閉後不影響主要功能

gitaly                  # 不知道做什麼的,關了就會工作不太正常
gitlab-workhorse        # 不知道做什麼的,關了就會工作不太正常
nginx                   # web伺服器
postgresql              # 資料庫
prometheus              # 據說是一套雲上監控系統,更多的可以看看這個文件:https://yunlzheng.gitbook.io/prometheus-book/
redis                   # 快取伺服器
sidekiq                 # 不知道做什麼的,好像runner跟他有些關係
unicorn                 # 不知道做什麼的

將上面那一堆,非必須服務關閉後,可以省下不少資源。但如果必須要開啟上面那些,那就只能改 gitlab.rb 檔案

# 不知道什麼程式數,官方推薦最高效配置是 CPU核數+1,可以調小
sidekiq['concurrency'] = 5
# 不知道什麼程式數,可以調小一些
unicorn['worker_processes'] = 8
# 資料庫快取大小,可以調小一些
postgresql['shared_buffers'] = "256MB"
# 資料庫最大併發數,可以調小
postgresql['max_worker_processes'] = 8

runner

runner安裝、註冊也都是常規操作,按照官方文件一步步來肯定都不會有問題。下面的說明是以 docker 方式來執行gitlab-runner

# 安裝runner
# docker安裝工具永遠都是那麼簡單,需要注意下里面的幾個引數 
# --rm 關閉容器後刪除容器副本,正式環境不會這麼玩,一般是換成:--restart always
# -v 將本地磁碟,掛載到容器內,用於存放 register 後的配置檔案,這個很有必要,要不容器掛了後配置就丟了
# 【重要】--add-host 這個引數會讓容器跑起來後,自動往host檔案(linux下在 /etc/hosts) 加上你指定的配置。像我這種用預設 gitlab.example.com 肯定是要加這個的,官方教程是不會告訴你這個的
$ sudo docker run --rm --name gitlab-runner -v /srv/gitlab-runner/config:/etc/gitlab-runner  -v /var/run/docker.sock:/var/run/docker.sock --add-host gitlab.example.com:192.168.222.129  gitlab/gitlab-runner  

# 註冊runner
# 註冊runner的本質其實就是往 runner 的配置檔案(/srv/gitlab-runner/config/config.toml)中寫配置,不過它會幫你檢查你的某些值否正確,如果你更喜歡直接寫配置檔案,直接改那個檔案也是可以的

# 官方教程給的是,再起一個 gitlab/gitlab-runner 臨時容器,執行 gitlab-runner register
# 官方註冊教程:https://docs.gitlab.com/runner/register/#docker
$ docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

# 個人更喜歡直接進入容器,執行 gitlab-runner register 來註冊runner
$ docker exec -it $containerID bash  # 物理機,進入容器的方式
$ gitlab-runner register             # 執行註冊程式

# 順便提下,通過docker方式執行runner,runner的日誌都會直接輸出到容器終端,所以通過  docker logs -f containerID 就可以直接檢視實時日誌了,還挺方便

一路下來,基本不會碰到什麼問題。但萬萬沒想到,你這時候去 gitlab 執行pipeline,還是會報錯。錯誤如下:

1567925722573

看出來了沒 還在報: Could not resolve host:gitlab.example.com

這時候你去看 runner 的日誌,你會發現它正常的拉取(日誌顯示的是received,但這裡本質是runner不斷的的去輪詢gitlab看似否有待處理的job)到了 gitlab的job,但就是就是不能正常執行完。

細想下runner工作的原理,不難發現 :雖然runner容器你增加了host配置,但真正執行job的容器並不是runner所在的容器而是由runner收到job後拉起來的,runner 配置檔案並沒有執行拉起job容器時也需要新增host,所以問題還是出在配置檔案中。需要手動編輯 /srv/gitlab-runner/config/config.toml 檔案,加點料:

[[runners]]
  name = "runner_php"
  url = "http://gitlab.example.com/"
  token = "zW9Zc5xxxxxgp2gk"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.docker]
    tls_verify = false
    image = "php"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    # 說的就是它,必須手動加上,配置檔案中是否這種方式為註釋 不確定,最好複製的時候把這一行刪掉
    extra_hosts = ["gitlab.example.com:192.168.222.129"]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

對於加深runner、pipeline的理解,推薦這個文章:https://scarletsky.github.io/2016/07/29/us...

感悟總結

資料看再多,不如直接上手操作一遍。自己過一遍,很多之前理解不到位的東西自己跑一遍、實驗一下就理解了。

相關文章