3

可能重复:
Windows 上的持续集成堆栈与 Mercurial + Mercurial 队列?

如果是这样,您的构建过程是什么样的?

我很难让 TeamCity 运行我的 FinalBuilder 脚本(主要是因为我缺乏对所有 3 种工具的经验/理解)。现在我让 FinalBuilder 管理所有源代码控制检查,TeamCity 基本上只是运行 FinalBuilder 脚本并读取 NUnit 测试结果,但由于在执行 kiln 的 mercurial 命令时出现身份验证错误,它不起作用。

4

2 回答 2

3

如果您在运行 FinalBuilder 脚本的机器上安装了 Kiln Client,您将可以访问“kilnauth”mercurial 扩展,它应该可以为您解决这个问题。

只需以运行 FinalBuilder 脚本的用户身份登录构建机器,然后从您尝试使用的 Mercurial 存储库手动执行一个推送或拉取命令,系统将要求您进行身份验证。验证一次,Kiln 客户端扩展程序将记住此用户的此验证......并且 FinalBuilder 脚本的任何后续运行都应该很好地验证。

这是否为您解决了问题?这是最好的解决方案,因为它不会在您的机器上存储任何用户名或密码。显然还有其他可能性,例如将 Mercurial 的路径更改为使用 http://{username}:{password}@{kiln url} 格式...但这不如上述技术好或安全。

这有意义吗?

于 2010-03-10T01:39:17.707 回答
2

我对 Kiln 一无所知,但我刚刚开始为 VSoft 工作,并且正在为下一个版本的 FinalBuilder 开发 Mercurial 动作。希望其中一些会有所帮助。

您是通过 SSH 还是 SSL 进行身份验证?您可以从命令行拉/推到存储库吗?几乎所有可以从命令行工作的东西都应该可以使用 FinalBuilder。

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

  • 下载puttygen和选美
  • 在 puttygen 中创建一个新的 SSH 密钥
  • 将私钥添加到选美
  • 将公钥添加到 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属性添加到您的操作时,请勾选Property is Hidden from Action InspectorProperty is Read Only in Action Inspector选项。

要生成存储库字符串,您需要在 Action 的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);

注意,我没有测试过该代码,但希望它能给你一个想法。

于 2010-03-10T03:11:54.530 回答