服務安裝
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,還是會報錯。錯誤如下:
看出來了沒 還在報: 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...
感悟總結
資料看再多,不如直接上手操作一遍。自己過一遍,很多之前理解不到位的東西自己跑一遍、實驗一下就理解了。