2017-01-10 68 views
2

我有一個Jenkins創建和部署網站包的工作。msbuild的行爲與命令行有所不同Jenkins

當我從Jenkins運行作業時,它會爲每個項目創建一個包,並且部署包不包含webjobs。但是,從命令行執行相同的msbuild命令,它確實會創建一個更大的包文件,包括其中的webjobs。

我試過運行msbuild命令行使用相同的用戶帳戶詹金斯服務,並且也工作。

如果我比較這兩個MSBuild的輸出日誌,我得到了幾個不同的是:主要的區別在命令行的MSBuild日誌包括:

Target "DiscoverWebJobs" in file "E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.wap.targets" from project "E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\WebAPI\WebAPI.csproj" (target "Build" depends on it): 
    Task "Message" 
     WebJobs: reading [E:\Jenkins\jobs\Publish job\workspace\Project\WebAPI\Properties\webjobs-list.json] 
    Done executing task "Message". 
    Using "ReadWebJobsConfigFile" task from assembly "E:\Jenkins\jobs\Publish job\workspace\Project\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\Microsoft.Web.WebJobs.Publish.Tasks.dll". 
    Task "ReadWebJobsConfigFile" 
    Done executing task "ReadWebJobsConfigFile". 
    Task "Message" 
     WebJobs: WebJobs found: [../blah1.csproj;../blah2.csproj;../blah3.csproj;] 
    Done executing task "Message". 
    Done building target "DiscoverWebJobs" in project "WebAPI.csproj" 

我試圖在詹金斯命令行中添加目標「DiscoverWebJobs」,但它說它找不到......我花了很多時間嘗試不同的選擇,從不同的帳戶運行,使用PowerShell,...但沒有,我敢肯定是愚蠢的。

如果zip包文件不包含webjobs文件,那麼當我進行部署時,它不會更新webjobs。我可以單獨部署每個zip文件,但有一些webjobs,如果有人包含一個新的,它不會被部署,使這個項目的持續集成設置無用。

+0

如果您提供詳細的冗長運行(通過'/ V:D'至msbuild命令),jenkins可能會記錄下爲什麼該目標被跳過的爆炸。尋找包含'WebJobs'的行*目標DiscoverWebJobs正在滑動,因爲...* – stijn

+0

我比較了來自Jenkins和命令行的兩個msbuild日誌,但沒有跳過目標,只有只能從命令行運行的目標,但是當從Jenkins作業完成msbuild時它們不運行。 –

回答

1

終於在工作!對我來說,解決方案中的所有csproj文件都會刪除重複的「Microsoft.Web.WebJobs.Publish」目標導入。

< Import Project =「.. \ packages \ Microsoft.Web.WebJobs.Publish.1.0.11 \ tools \ webjobs.targets」Condition =「Exists('.. \ packages \ Microsoft.Web.WebJobs。 Publish.1.0.11 \工具\ webjobs.targets')」/>

<Import Project="..\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.targets" Condition="Exists('..\packages\Microsoft.Web.WebJobs.Publish.1.0.12\tools\webjobs.targets')" /> 

我不得不版本1.0.11和1.0.12所以我刪除舊的,它創造了完整的軟件包,包括webjobs。

不知道爲什麼從詹金斯或在同一臺機器上從命令行運行的MSBuild將不得不與那些重複的目標有什麼不同的效果,但...

+1

不同的是,在一個上下文中,文件夾「.. \ packages \ Microsoft.Web.WebJobs.Publish.1.0.11 \ tools \ webjobs.targets」仍然存在;在另一種情況下,由於其「Condition」屬性,過時的導入被忽略。關於如何導致輸出差異的最佳猜測是對'Microsoft.Web.WebJobs.Publish.Tasks.dll'的未記錄更改或兩次執行腳本的副作用,可能與第一次運行的剩餘屬性值,項目有關或中間輸出文件。 – weir

1

檢查從Microsoft WebJobs Publish 1.0.12 NuGet包webjobs.wap.targetswebjobs.targets,以下的msbuild參數影響DiscoverWebJobs目標是否運行。您可以使用帶有msbuild的/p:開關來設置/覆蓋它們的值。

  • SkipApp_DataFolder(必須False
  • WebJobsExtendWebPublish(必須true
  • WebJobsConfigFile(一個文件需要在這條道路存在)

你不應該需要設置/如果存在以下文件,則覆蓋最後一個:E:\Jenkins\jobs\Queue - Publish\workspace\tvdQueue\WebAPI\Properties\webjobs-list.json

+0

好吶@weir,但我仍然得到同樣的問題:( –

+0

上面指定的路徑上的webjobs-list.json文件的內容是什麼? – weir

+0

{ 「$ schema」:「http://schemastore.org/模式/ JSON/webjobs-list.json 「 」WebJobs「:[{ 」文件路徑「:」 ../blah1/blah1.csproj 「 },{ 」文件路徑「:」 ../blah2/ blah2.csproj 「 },{ 」文件路徑「:」 ../blah3/blah3.csproj」 } ] } –