有人使用TeamCity、FinalBuilder和Mercurial(Kiln)来管理他们的持续集成吗?

3
如果是这样,你的构建过程是什么样子的?
我很困难(主要是因为我缺乏对这三个工具的经验/理解)让TeamCity运行我的FinalBuilder脚本。现在我有FinalBuilder来管理所有的源代码控制检出,而TeamCity基本上只是运行FinalBuilder脚本并读取NUnit测试结果,但由于执行mercurial命令到kiln时出现身份验证错误,所以它无法正常工作。
2个回答

3
如果您已经在运行FinalBuilder脚本的机器上安装了Kiln Client,那么您将可以访问“kilnauth”mercurial扩展程序,这应该能为您解决这个问题。
只需以运行FinalBuilder脚本的用户身份登录构建机器,然后手动执行一条来自您正在使用的Mercurial存储库的推送或拉取命令,您将被要求进行身份验证。进行一次身份验证后,Kiln客户端扩展程序将记住此用户的身份验证信息...随后FinalBuilder脚本的任何后续运行都应该能够正常进行身份验证。
这对您有帮助吗?这是最好的解决方案,因为它不会在您的计算机上存储任何用户名或密码。当然,还有其他可能性,比如更改您的Mercurial路径,以使用格式http://{username}:{password}@{kiln url}...但这不像上述技术那样好或安全。
这听起来合乎逻辑吗?

1
我们无法在TeamCity中使其工作,但是遵循http://www.jetbrains.net/devnet/thread/286891的建议似乎解决了这个问题... - Byron Ross

2

我对Kiln一无所知,但我刚开始为VSoft工作,并正在为FinalBuilder的下一个版本开发Mercurial操作。希望这些内容能够有所帮助。

您是通过SSH或SSL进行身份验证的吗?您能否从命令行中拉取/推送存储库?几乎任何您可以从命令行中使用的功能都可以在FinalBuilder中实现。

要通过SSH对BitBucket进行身份验证,我执行了以下操作:

  • 下载puttygen和pageant
  • 在puttygen中创建新的SSH密钥
  • 将私钥添加到pageant中
  • 将公钥添加到BitBucket中

从那里,我可以成功地

hg push ssh://hg@bitbucket.org/user/repo

我还安装了TortoiseHG,Mercurial正在使用TortoisePlink作为ssh客户端。

如果您正在使用SSL,可以在FinalBuilder操作中存储用户名/密码组合。要将TextEdit框转换为密码字段,请将PasswordChar属性从#0更改为*。然后在ReadData事件中添加类似以下内容:

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

WriteData事件中添加以下内容:

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

当您向操作添加Token属性时,请选中从操作检查器中隐藏属性在操作检查器中只读属性选项。
要生成您的存储库字符串,您需要在操作的GetCommandLine事件中执行以下操作:
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);

注意,我没有测试过这段代码,但希望它能给你提供一些想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接