基於windows配置gitlab-runner
- gitlab-runner是配合gitlab ci/cd實現自動化部署的執行者,和Jenkins 類似,可以通過編寫對應的.gitlab-ci.yml執行不同的job腳本。
- 下面的基於shell模式下的場景
下載對應的gitlab-runner.exe文件
安裝服務
準備安裝目錄
拷貝gitlab-runner.exe到創建好的gitlab-runner文件夾
安裝服務
通過管理員模式運行cmd進入gitlab-runner所在目錄
# 執行下面命令註冊服務
./gitlab-runner.ele install -user ".\ENTER-YOUR-USERNAME" --password "ENTER-YOUR-PASSWORD"
註冊完服務後,可以通過win+r執行service.msc
查看服務列表裏已經添加上該服務
這時gitlab-runner的服務啓動方式是自動。這裏意味着只要start過runner開機就會自動開啓服務
--user字段
這裏的user字段爲可選字段,如果不寫則默認使用本地系統,這裏會導致一定概率找不到npm、node等服務。原因是如果你電腦的node服務安裝位置是具體用戶目錄下的時候,系統執行的時候會找不到。所以這裏user最好填寫具體的用戶。這樣runner內就可以貢獻該用戶下所有資源。當然這裏都是基於shell模式下說的。
註冊服務到具體項目
這裏的方式和mac、linux沒有區別,按照提示填寫對應的參數就可以了
./gitlab-runner.exe register
成功後,打開對應項目就可以看到這個runner了,不過圖標還是感嘆號,因爲還沒有啓動
啓動服務
./gitlab-runner.exe start
啓動成功後項目那邊就會顯示綠色的標示了,這時就可以運行一個任務試試看了
停止服務
./gitlab-runner.exe stop
查看runner運行狀態
./gitlab-runner.exe status
另一種啓動服務的方式
這種方式允許可以讓runner內執行命令和直接打開powershell執行命令一致,在某些特殊情況下可以用到
./gitlab-runner.exe run
作爲electron編譯機時遇到的問題
windows下的gitlab-runner編譯時會遇到很多權限問題
所屬用戶導致的問題
上面說到了如果沒有指定user的話默認是本地系統,有一定概率導致不能執行node、npm等服務,假設你沒有遇到上面說到的問題,因爲用戶不一樣的原因,所以資源是隔離的,因爲electron編譯的時候需要下載electron和electron-builder
等依賴,這時就需要重新下載一次,如果沒有通過配置淘寶鏡像或vpn的話,首次安裝基本失敗。
代碼簽名失敗
錯誤類型1
沒有指定具體用戶的話,基本會報After Private Key filter, 0 certs were left.
異常,這個個人理解就是因爲讀不到u盤簽名工具導致的, 應該是當前登陸用戶是xxx,而runner登陸用戶是本地系統,所以被過濾了。
錯誤類型2
選擇了當前系統的user了,u盤簽名工具也找到了,不過會報類似下面的錯誤
SignTool Error: An unexpected internal error has occurred.
The following certificates were considered:
After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected:
The following additional certificates will be attached:
Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-2147023673/0x800704c7)
這個錯誤是沒有輸入密碼報的異常,如果之前已經輸入過密碼的話(一定時間內可以免輸密碼簽名)就可正常編譯,意思就是runner不能正常喚起輸入密碼的輸入框。這裏我嘗試了很多種方法還是不能解決,不知道是不是我使用的代碼簽名軟件winCodeSign
版本不太對(我使用的是2.6.0版本)。反正最終還是放棄了
解決方式
修改啓動方式
使用./gitlab-runner.exe run
的方式,讓runner
執行環境和用戶開發環境一致,不過這個的缺點是不會開機自啓,而且是在終端打開的,所以爲此我編寫一個vbs的腳本,然後放在windows啓動目錄,這樣就可以達到開機自啓而且是後臺運行的效果了。
CreateObject("Shell.Application").ShellExecute "cmd.exe","gitlab-runner.exe run","","runas",0
這裏有必要解釋下上面的幾個參數。
# cmd.exe: 打開的具體應用,這裏使用cmd
# gitlab-runner.exe run: 這裏指打開cmd後輸入的參數,這裏就是執行gitlab-runner.exe run了,注意的是這裏需要輸入絕對路徑比較好
# runas: 管理員權限運行
# 1: 是否後臺運行(0:後臺運行, 1窗口運行)
其它注意事項
需要把在服務裏把gitlab-runer
啓動方式由自動改爲手動
後記
這裏初步實現了gitlab-runner
裏編譯遇到的一些奇怪的權限和應用調用問題,不過還有一個不太方便問題就是彈出簽名密碼輸入框的時候密碼還得手動輸入,這個環節就會讓自動化流程斷開。所以後面會引入python自動化輸入密碼簽名。