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

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

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

有帮助吗?

解决方案

如果您已经安装运行你的FinalBuilder脚本的计算机上的客户端窑,你将有机会获得“kilnauth”善变的扩展,它应该解决这个问题你。

只需登录到构建机器运行该脚本的FinalBuilder和手动执行一个推或你想要使用Mercurial库拉命令的用户,你会被要求进行身份验证。验证一次,窑客户端扩展会记住这个认证此用户...并通过脚本的FinalBuilder任何后续运行中应认证就好了。

这是否能解决这个问题吗?这是最好的解决方案,因为它不存储在计算机上的任何用户名或密码。显然还有其他的可能性,例如更改水银的路径使用格式为http:// {用户名} {}密码@ {窑URL} ...但是这是不是漂亮或安全如上的技术。

这是否有道理?

其他提示

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

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

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

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

从那里,我可以成功

hg push ssh://hg@bitbucket.org/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 选项。

要生成存储库字符串,您需要在操作中执行类似的操作 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);

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top