2010-12-10 32 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