能夠參考https://docs.gitlab.com/runner/development/README.html 來進行搭建,這裏須要注意的是,go version最好爲go1.8.7
,高版本的go version,可能會安裝失敗。html
gitlab-runner
在註冊runner時,須要用到registry
、install
、start
這三個命令。而其實install
和start
只是服務註冊的git
在main.go文件的入口處,其調用了common.GetCommands()github
而這個函數是爲了註冊參數的,其核心代碼爲:golang
Name
爲咱們要註冊的參數,Action
爲調用參數後調用的方法。web
在註冊方法時,只須要使用RegisterCommand2(參數名, 說明, 動做函數類)
便可。docker
在commands/registry.go
裏有一個init函數,註冊了registry
shell
newRegisterCommand
函數確定返回了Execute
函數,也就是觸發registry
的動做函數。數組
這裏返回了一個RegisterCommand
類,而這個類下實現了Execute
方法。websocket
其中s.askRunner()
就是咱們輸入命令後,出現的各類詢問,如:gitlab-ci URL、token、description、tags。ssh
在askRunner
函數裏,當你輸入完成後,有一步校驗的操做,檢驗你輸入的只是否真的能夠鏈接到gitlab-ci上。
這些都沒什麼好說的。在askRunner
函數後,還askExecutor
、askExecutorOptions
函數。這兩個函數的做用是詢問你要選擇哪一種執行者,也就是咱們見到的Please enter the executor: docker+machine, docker, docker-ssh, shell, docker-ssh+machine, kubernetes, parallels, ssh, virtualbox:
當你所有輸入完成後,會把你輸入值,保存在~/.gitlab-runner/config.toml
文件裏。
其實到這步的時候,整個gitlab-ci就已經配置好了,install
、start
的做用下面再說
當你註冊完成後,再使用install
進行安裝時,其實安裝的是gitlab-ci
服務。
咱們看下commands/service.go
文件的內容:
能夠看到其餘的參數基本都是在這裏進行註冊,其餘的咱們暫時不看,專一看下install
、start
其中這兩個參數的行爲都是RunServiceControl
函數,這個函數的代碼也十分簡單
其中install
比較特別,單獨調用了runServiceInstall
函數,這個函數的做用就是爲了檢查config.toml
以及當前用戶的代碼,沒啥好說的,最後也調用了service.Control(s, c.Command.Name)
方法。這個方法是github.com/ayufan/gola…庫,這個庫是一個註冊服務的庫,也就說當你使用gitlab-runner install
的時候,實際上是在註冊服務,服務的做用是保證gitlab-runner
一直在後臺運行以及開機運行。
當服務註冊好後,再經過gitlab-runner start
打開服務(這裏其實能夠集成到install裏,可是不知道爲何gitlab官網沒有這麼作)
當咱們調用service.Control(s, 'start')
時,其實會執行s.Start()
方法,而這個方法其實就是開啓服務的,而打開服務時,也須要一個命令行,由於要告訴系統我執行的什麼的命令是服務。其代碼爲:
咱們看到Arguments
是一個數組,且第一個元素是run
,後面的代碼也都是run
的參數了。
如今能夠肯定,當咱們使用gitlab-runner start
時,其內部調用了run
當作服務的命令。咱們來看下Run
的代碼
其中mr.feedRunners(runners)
函數只是作心跳檢測的,沒什麼可說的。
而mr.startWorkers(startWorker, stopWorker, runners)
纔是主要的,這個函數通過5~6次的調用,最終調用了一個RequestJob
函數,這個纔是重頭戲
能夠看到這裏是發請求詢問gitlab-runner
有沒有新的任務,若是有則返回resqonse
而這個函數的調用鏈,有一個方法是一直在循環這個函數,從而實現了輪詢
(我以前一直覺得是經過websocket來作,沒想到是輪詢來實現的,多是爲了兼容性?)
最終的結果,就是gitlab-runner
啓動後,一直在輪詢給gitlab
發請求,問它有沒有新的任務。
等我有空寫下章再說吧。
我司(愛樂奇)招人,感興趣的小夥伴能夠來投簡歷呀。
彈性工做制、每日水果、同事都特別nice、96五、團建、五險一金...
地點上海浦軟大廈