3

可能重复:
Continuous Integration stack on Windows with Mercurial + Mercurial Queues?任何人管理与TeamCity,FinalBuilder和Mercurial(窑)的持续集成?

如果是这样,那么你的构建过程是什么样子?

让我在TeamCity上运行我的FinalBuilder脚本时遇到了困难(主要是因为我缺乏对所有3种工具的经验/理解)。现在我有FinalBuilder管理所有的源代码管理签出和TeamCity基本上只是运行FinalBuilder脚本和读取NUnit测试结果,但它不起作用,因为执行汞的命令窑时验证错误。

回答

3

如果您在运行FinalBuilder脚本的机器上安装了Kiln客户端,您将有权访问“kilnauth”mercurial扩展程序,以便为您解决此问题。

只需以运行FinalBuilder脚本的用户身份登录到构建机器并手动执行您尝试使用的Mercurial存储库中的一个推送或拉出命令,就会要求您进行身份验证。验证一次,并且Kiln客户端扩展会记住这个用户的身份验证...以及任何后续由FinalBuilder脚本运行的应用程序都应该进行身份验证。

这是否解决了你的问题?这是最好的解决方案,因为它不会在您的机器上存储任何用户名或密码。显然还有其他的可能性,比如改变你的Mercurial的路径来使用http:// {用户名}:{密码} @ {窑网址}格式......但这不像上面的技术那么好或者安全。

这是否有意义?

+1

我们无法使用TeamCity工作,但遵循http://www.jetbrains.net/devnet/thread/286891的建议似乎解决了这个问题... – 2010-04-27 10:58:51

2

我对窑炉一无所知,但我刚刚开始为VSoft工作,并正在为下一版FinalBuilder的Mercurial操作工作。希望这会有所帮助。

您是通过SSH还是SSL进行身份验证?你能从命令行拉出/推送到存储库吗?在FinalBuilder中,您可以从命令行使用的任何东西都是可能的。

要通过SSH进行身份验证到位桶,我做了以下内容:

  • 下载的puttygen和选美
  • 创建的puttygen一个新的SSH密钥
  • 添加私钥选美
  • 添加BitBucket的公钥

从那里,我可以成功地

hg push ssh://[email protected]/user/repo 

注意,我也安装了TortoiseHG,Mercurial使用的是TortoisePlink作为ssh客户端。

如果您使用的是SSL,您可以将用户名/密码组合存储在FinalBuilder操作中。要将文本编辑框变为密码字段,请将PasswordChar属性从#0更改为*。然后在ReadData事件中,添加类似

Page.tbPassword.Text = DecryptString(Properties.PropertyAsString("Token")); 

,并在WriteData事件中,添加

Properties.PropertyAsString("Token") = EncryptString(Page.tbPassword.Text); 

当你Token属性添加到你的动作,勾选Property is Hidden from Action InspectorProperty is Read Only in Action Inspector选项。

要生成库的字符串,你会想要做这样的事情在行动的​​事件:

var repo = Context.Properties.PropertyAsString("Repository"); 
var username = Context.Properties.PropertyAsString("Username"); 
var password = DecryptString(Context.Properties.PropertyAsString("Token")); 
var repo = "ssh://" + username + ":" + password + "@" + repo; 

CommandLine.AddArgument("push", repo, qtNone); 

NB,我没有测试的代码,但希望它给你的想法。