如果是这样,您的构建过程是什么样的?
我很难让 TeamCity 运行我的 FinalBuilder 脚本(主要是因为我缺乏对所有 3 种工具的经验/理解)。现在我让 FinalBuilder 管理所有源代码控制检查,TeamCity 基本上只是运行 FinalBuilder 脚本并读取 NUnit 测试结果,但由于在执行 kiln 的 mercurial 命令时出现身份验证错误,它不起作用。
如果是这样,您的构建过程是什么样的?
我很难让 TeamCity 运行我的 FinalBuilder 脚本(主要是因为我缺乏对所有 3 种工具的经验/理解)。现在我让 FinalBuilder 管理所有源代码控制检查,TeamCity 基本上只是运行 FinalBuilder 脚本并读取 NUnit 测试结果,但由于在执行 kiln 的 mercurial 命令时出现身份验证错误,它不起作用。
如果您在运行 FinalBuilder 脚本的机器上安装了 Kiln Client,您将可以访问“kilnauth”mercurial 扩展,它应该可以为您解决这个问题。
只需以运行 FinalBuilder 脚本的用户身份登录构建机器,然后从您尝试使用的 Mercurial 存储库手动执行一个推送或拉取命令,系统将要求您进行身份验证。验证一次,Kiln 客户端扩展程序将记住此用户的此验证......并且 FinalBuilder 脚本的任何后续运行都应该很好地验证。
这是否为您解决了问题?这是最好的解决方案,因为它不会在您的机器上存储任何用户名或密码。显然还有其他可能性,例如将 Mercurial 的路径更改为使用 http://{username}:{password}@{kiln url} 格式...但这不如上述技术好或安全。
这有意义吗?
我对 Kiln 一无所知,但我刚刚开始为 VSoft 工作,并且正在为下一个版本的 FinalBuilder 开发 Mercurial 动作。希望其中一些会有所帮助。
您是通过 SSH 还是 SSL 进行身份验证?您可以从命令行拉/推到存储库吗?几乎所有可以从命令行工作的东西都应该可以使用 FinalBuilder。
为了通过 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 Inspector
和Property 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);
注意,我没有测试过该代码,但希望它能给你一个想法。