2016-12-01 21 views
1

我想深入瞭解teamcity的深處,以便更好地理解它在底層做什麼(並提高我自己的構建知識)。我注意到,當我運行構建步驟時,它會執行自己的.cmd,我認爲它包裝了msbuild腳本。問題是,每當我查看指定的目錄時,文件不存在,因爲我猜測它創建,執行然後幾乎立即刪除。有關如何訪問文件的任何建議?或裏面有什麼?teamcity中有什麼custom_script.cmd

首發:d:\ TeamCity的\ buildAgent \ TEMP \ agentTmp \ custom_script5990675507156014131.cmd

+0

你的問題會更容易發現你是從標題中刪除(可能是)隨機數。如果該文件在構建過程中沒有保留,你可以看看msbuild在啓動時使用的參數。 Process Explorer,儘管它只告訴你cmd文件中的參數,而不是整個內容。 – stijn

+0

我已根據建議更新了標題。我試着看看進程資源管理器,但我無法讓它工作。 – ljsg

回答

1

臨時文件由TeamCity的當您運行添加命令行建立與 「自定義腳本」 作爲亞軍步驟創建。

此文件的內容將是您在用戶界面中指定的Custom scriptCustom Script build step

產生的輸出是:

Step 1/1: Command Line (1s) 
Starting: D:\TeamCity\buildAgent\temp\agentTmp\custom_script2362934300799611461.cmd 
in directory: D:\TeamCity\buildAgent\work\c72dca7a7355b5de 
Hello World 
Process exited with code 0 
+0

這似乎很有可能,但我無法驗證100%。從你的例子中,我們可以看到回聲,但我也希望看到例如開關和提供的參數。 – ljsg

0

我四處張望了一會兒,但似乎有在TeamCity的沒有配置可變,可以讓生成的文件。現在,如果執行的命令需要一些時間,例如超過幾秒鐘,您可以在資源管理器中打開臨時目錄並從開始構建的那一刻開始按F5(刷新),直到看到.cmd文件出現,然後快速右鍵單擊它並選擇「編輯「在文本編輯器中打開它。如果這是太硬,你可以提出here解決方案嘗試:創建代碼PowerShell腳本是這樣的:

$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = "D:\TeamCity\buildAgent\temp\agentTmp" 
$watcher.Filter = "*.cmd" 
$watcher.IncludeSubdirectories = $false 
$watcher.EnableRaisingEvents = $true 
$action = { $path = $Event.SourceEventArgs.FullPath 
      Add-content "D:\log.txt" -value (Get-Content $path) 
      }  
Register-ObjectEvent $watcher "Created" -Action $action 
Register-ObjectEvent $watcher "Changed" -Action $action 
while ($true) {sleep 1} 

並運行它。當構建開始並創建一個cmd文件時,powershell腳本會將內容複製到d:\ log.txt。儘管如此,這仍然不適用於非常短暫的腳本。在這種情況下,我剛剛加入類似

ping 127.0.0.1 -n 5 -w 1000 > NUL 

這將使其持續至少5秒鐘,使腳本持續更長的時間。

相關問題