2010-12-10 62 views
1

感覺像持續集成的普及,這應該是一塊蛋糕,但我很難過。我正在與HG建立TeamCity。我希望能夠將變更集推送到TeamCity監視和運行基於更改的存儲庫。這很容易。TeamCity + HG。只有拉(推?)傳遞版本

接下來,如果構建通過,我希望該變更集被拉入「乾淨」存儲庫......一個僅包含傳遞變更集的庫。應該很容易,但...

TeamCity 6支持多個構建步驟,如果任何步驟失敗,其餘的不運行。我的想法是在最後建立一個構建步驟,執行pull(或可選地推送?)以將傳入的變更集導入乾淨的存儲庫。

我想使用PsExec在存儲庫的框上運行hg。

如果我嘗試運行一個普通的'hg pull',它找不到hg.exe,即使它設置在路徑中並且我已經使用了-w標誌。

我已經嘗試把一個.bat文件放在乾淨的存儲庫中,它需要一個修訂參數,它在本地工作正常。當我嘗試遠程運行.bat文件(使用PsExec)時,它運行得很好,但它試圖在構建代理上運行它。即使我設置了-w參數,它也會在那裏運行.bat文件,但是會嘗試運行構建代理框中的內容。

我只是在我的方法?似乎這是一個非常明顯的事情,要麼我的Google技能正在減弱,要麼沒有人認爲這是值得寫的。無論哪種方式,我被困在SVN的土地試圖脫身,所以我希望得到一些幫助!

回答

0

添加以下行到你的PowerShell配置文件:

function hg { 
    cmd /c hg.exe $args 
} 

如果不承認hg.exe,您可能需要將其添加到您的路徑:

$env:Path = $env:Path + ";C:\Program Files\TortoisHG\"; 

(你可以只輸入notepad $profile進入命令提示符,它會打開文件供您在記事本中編輯。複製&粘貼此行然後保存,退出。)

(見PowerShell alias syntax for running a cmd.exe builtin function?

1

不是直接運行命令,而是嘗試在shell下運行它,而不是?這將確保您獲得您期望的環境變量。如果您不使用命令shell,它將直接執行該命令而不設置環境,因此您必須完全指定hg可執行文件的路徑。

試用PSEXEC如一個命令:psexec c:\windows\system32\cmd.exe /c hg.exe

在機器名和hg的子命令添加適當的,當然。

+0

這工作實際上讓它運行... ish。 – 2010-12-12 05:44:09

+0

然後你應該把這個標記爲答案......是的。關於它的是什麼? – 2010-12-12 07:13:34

+0

對不起......在發佈這個帖子後,昨天晚上試圖這麼做,但是在發佈後,Stack下降了大約30秒的維護時間。 :)我必須確保TeamCity服務在有權訪問遠程框的帳戶下運行。我堅持的唯一的事情是,如果使用-d運行psexec,它將返回它啓動的PID的退出代碼。如果你在沒有-d的情況下運行它,它會無限期地掛起。不幸的是,TeamCity依賴於0的退出碼來確定合格/不合格。感謝您的提示,但它實際上運行了批處理文件,這就是我所堅持的。 – 2010-12-12 19:00:48