2013-10-17 51 views
5

我有一些關於詹金斯和運行Powershell腳本的問題。長話短說:腳本需要8倍的執行時間,然後在服務器(從站)上手動運行(只需幾分鐘)。我不明白爲什麼?詹金斯超時,因爲長腳本執行

在腳本中的函數調用命令如& msbuild.exe或& svn commit。我發現腳本在命令執行前的那些行中掛起。結果是,詹金斯因爲劇本花了很長時間而超時。我可以改變Jenkins作業配置中的超時閾值,但我不認爲這是問題的解決方案。 沒有錯誤輸出或任何信息,爲什麼需要這麼長時間,我沒有任何進一步的想法。也許你們中的一個人可以告訴我,Jenkins如何調用這些命令。

這就是詹金斯做(Windows批處理插件):

powershell -File %WORKSPACE%\ScriptHead\DeployOrRelease.ps1 
+0

「腳本需要8倍的執行時間,然後在服務器(從站)上手動運行它(只需幾分鐘)」您是否在詹金斯運行的同一用戶下運行腳本? –

+0

對不起,延遲迴復。不,我剛剛在我的帳戶內執行了它(管理權限)。但這可能是一個很好的提示! – Rosch

+0

這是因爲您通過cmd和其中一個cmdlet調用powershell永遠不會返回..發佈代碼或僅通過創建批處理文件並在本地運行它來測試 – Cole9350

回答

0

我已經創建了自己的PowerShell的CI Service之前,我發現詹金斯支持它的own such plugin。但在我的實施和我目前的工作配置中,我們遵循樣本隔離原則規則:越多越好。我發現我的CI服務在不同步驟中分離時效果更好(在發生錯誤時也很容易進行根本原因分析)。單一責任原則在這裏也很有幫助。因此,在Jenkins中,我們將&後製作,構建和電子郵件步驟作爲單獨的腳本。關於

msbuild.exe

至於我記得在我的案件有與文件系統路徑的操作有關的問題。所以當腳本被分成不同的函數時,我們有更好的性能(額外的參數檢查)。

0

使用「分而治之」技術。你有兩個選擇:修改你的腳本,以便顯示正在做什麼以及每一步需要多少。第二個選擇是進行更小的腳本來執行類似操作:

  • 獲取代碼源,
  • 編譯/構建應用程序,
  • 運行測試,
  • 創建一個包,
  • 發送包
  • 存檔日誌
  • 發送通知。

最棘手的問題通常是第一步:從GIT或SVN或Mercurial或任何版本控制系統獲取源代碼。確保此步驟未嵌入腳本中。

在作業運行過程中,Jenkins捕獲輸出並使用AJAX在瀏覽器中顯示結果。在腳本中,確保您爲每個步驟或幾個步驟刷新標準輸出。某些語言緩存標準輸出,因此只能在最後看到結果。

此外,您還可以創建有助於歸檔和驗證較舊運行的活動狀態的日誌文件。根據我的經驗,使用Jenkins多於10步需要創建一個專門的應用程序,可以運行多個步驟,如「機器人框架」。