2017-01-19 46 views
4

我想在Windows上使用bash作爲GitLab CI Runner的shell。Windows GitLab使用Bash的CI Runner

concurrent = 1 
check_interval = 0 

[[runners]] 
    name = "DESKTOP-RQTQ13S" 
    url = "https://example.org/ci" 
    token = "fooooooooooooooooooobaaaaaaaar" 
    executor = "shell" 
    shell = "bash" 
    [runners.cache] 

不幸的是我無法找到指定的CI亞軍應該用實際的shell程序的選項。默認情況下,它只是試圖運行它找不到的bash。我不知道爲什麼,因爲當我打開一個Windows命令行並輸入bash它的作品。

Running with gitlab-ci-multi-runner 1.9.4 (8ce22bd) 
Using Shell executor... 
ERROR: Build failed (system failure): Failed to start process: exec: "bash": executable file not found in %PATH% 

我嘗試添加一個文件bash.cmd包含

@"C:\Program Files\Git\usr\bin\bash.exe" -l 

這給了我這個奇怪的錯誤我的用戶目錄:

Running with gitlab-ci-multi-runner 1.9.4 (8ce22bd) 
Using Shell executor... 
Running on DESKTOP-RQTQ13S... 
/usr/bin/bash: line 43: /c/Users/niklas/C:/Users/niklas/builds/aeb38de4/0/niklas/ci-test.tmp/GIT_SSL_CAINFO: No such file or directory 
ERROR: Build failed: exit status 1 

有沒有辦法正確配置呢?

回答

0

它看起來像你試圖將gitlab-ci與Linux的Windows子系統(可以通過在Windows命令提示符處鍵入bash訪問)相鏈接?我懷疑這是由Gitlab的runner配置直接支持的。

相反,我會建議在你的shell執行程序中使用Powershell。

  Executor = 'shell' 
      Shell = 'powershell' 

然後,您可以下拉到猛砸在你.gitlab-ci.yml調用的腳本。

鑑於這是不好的做法,執行比.gitlab-ci.yml本身(而不是呼喚外部腳本),你失去了小範圍內很瑣碎的shell腳本更受被迫使用原生的Windows外殼程序。

4

這裏有兩個問題,兩者都可以解決。

  1. gitlab亞軍找不到bash
  2. gitlab亞軍不結合UNIX風格和Windows風格的路徑非常好。

你基本上已經成功地通過創建bash.cmd文件來解決第一個問題。但是,如果你很好奇它爲什麼不起作用沒有它,我的猜測是bash運行在命令提示符下,因爲它包含它的目錄(例如在你的情況下「C:\ Program Files \ Git \ usr \ bin「)包含在您的用戶帳戶的PATH環境變量中。但也許你正在運行系統帳戶中的gitlab-runner,該帳戶可能沒有相同的PATH。 因此,首先要做的就是檢查系統的PATH變量,並根據需要添加bin目錄(即使用控制面板中的系統小程序,如herehere所述)。請確保在進行更改後重新啓動機器,因爲只有在重新啓動後纔會應用更改。這應該使bash工作,即使從系統或管理員帳戶中運行的服務調用。

至於創建bash.cmd後得到的奇怪錯誤,那是由於第二個問題。將bash和Windows結合使用時,路徑通常很難找到正確的路徑。Gitlab-runner可能試圖確定構建路徑是相對還是絕對路徑,並最終將Windows路徑與它認爲是工作目錄($PWD)相提並論。這看起來像一個錯誤,但gitlab仍然沒有修復它(從版本9.0亞軍!!),並可能永遠不會。也許他們已經認定這不是一個錯誤,或者是由於他們無法修復的底層軟件或工具中的錯誤,或者修復起來太困難。無論如何,我發現了一個解決方法。您可以在config.toml文件中指定構建的基本路徑。如果您使用unix風格的路徑,它可以解決問題。 在windows上,config.toml通常與gitlab-runner.exe(或gitlab-multi-runner-amd64.exe等)位於同一個文件夾中。在您最喜歡的文本編輯器中打開該文件。然後找到[[runners]]部分並添加兩行,如下所示。

builds_dir="/c/gitlab-runner/builds/" 
builds_cache="/c/gitlab-runner/cache/" 

您使用應該是「慶典版」的任何目錄的你要gitlab亞軍用於存儲路徑建立等重要如果你正在使用的cygwin,你會使用類似/cygdrive/c/...路徑而不僅僅是/c/...(適用於msys-git或獨立MSYS2等)。

這裏有一個config.toml文件的例子:

[[runners]] 
    name = "windows" 
    url = "https://your.server.name" 
    token = "YOUR_SECRET_TOKEN" 
    executor = "shell" 
    shell = "bash" 
    builds_dir="/c/gitlab-runner/builds/" 
    builds_cache="/c/gitlab-runner/cache/" 
+0

謝謝你的長篇大論地解釋,我想用猛砸風格的路徑,但已經沒有更新的問題/加我自己的答案。不過,它也會對其他人有幫助! –