2013-02-11 45 views
5

我想構建一個VS.sln,它有多個C++ .vcproj。解決方案文件是使用CMake生成的,我在Jenkins中使用了這部分工作(使用CMake builder插件)。爲了構建解決方案文件,我使用了msbuild。我能夠建立使用Visual Studio和在命令行中使用以下命令解決方法:Msbuild通過VS和命令行工作,但通過詹金斯失敗

C:\Jenkins\workspace\SonioTest>"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" /t:Rebuild bin/SonIO.sln 

這成功生成(即詹金斯駐留在同一臺機器上)。

但是,我試圖在Jenkins中自動化構建的這部分,並且構建最終失敗了幾個C1083錯誤("Cannot open source file: '..\path\to\file.ext': No such file or directory)。我已經嘗試使用Jenkins msbuild插件,並使用與終端中相同的命令作爲「執行Windows批處理命令」構建步驟,結果相同。

使用Windows批處理命令生成步驟,我可以在日誌中看到,正在執行的命令:

C:\Jenkins\workspace\SonioTest>"C:\Windows\Microsoft.NET\Framework\v4.0.30319 msbuild.exe" /t:Rebuild bin/SonIO.sln

...是完全一樣的命令行工作的一個,包括的工作目錄。

我正在運行Jenkins作爲服務,並且我的服務登錄爲我的帳戶(具有管理員權限)。任何人都知道詹金斯將執行批處理命令的目錄是什麼?

任何想法,爲什麼我看到詹金斯和命令行之間的這種行爲差異?

+0

我認爲你必須使用一個佔位符,就像%WORKSPACE% – 2013-02-11 14:42:39

+0

指定到您的解決方案的絕對路徑我已驗證該命令由Jenkins從同一個工作目錄運行。您的評論是否仍然適用?我不是100%確定你的意思。 – Kohanz 2013-02-11 15:00:47

回答

1

在不瞭解VS構建知識的情況下,它看起來很像環境設置。

我的第一個建議是確保在Jenkins中將目錄更改爲您運行良好命令的同一目錄,然後再嘗試。

此外,可能想嘗試將Jenkins作爲獨立應用程序首先運行。

作爲一種服務,也許允許服務「與桌面交互」。

我希望這是一個好頭......

+0

我已經驗證它與成功的非Jenkins命令(請參閱我的編輯)在相同的工作目錄中運行。由於我指定了我自己的(管理員)用戶帳戶,因此「與桌面互動」複選框呈灰色。 – Kohanz 2013-02-11 14:59:54

+0

您是否嘗試過將Jenkins作爲流程運行,而不是作爲服務? – 2013-02-11 19:50:52

3

這既是一個解決辦法作爲一個解決方案,但我最終使用devenv代替msbuild並能正常工作。

我知道這強烈暗示它是一個環境問題,但由於在構建服務器上安裝VS並不是問題,所以我決定節省在msbuild兔子洞中花費的時間。

1

Jenkins從屬代理與您在提示中執行相同命令行時所使用的環境不同的環境。比較兩種環境,注意差異,然後將它們添加到Jenkins作業中。

要獲得運行時,從環境,有它做一個從Windows命令「設置」提示

+0

我這樣做了(在切換到devenv之前),Jenkins從屬環境幾乎(不完全)是我的命令行環境的超集。我仔細研究了編譯時使用的變量(VC ...),他們幾乎一樣,詹金斯奴隸有一些額外的變量。我很感激這個幫助,但除非我有一個令人信服的理由才能從devenv.exe切換,否則我寧願不花更多時間參與調查。 – Kohanz 2013-02-12 14:53:40