基於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自動化輸入密碼簽名。