【问题标题】:Cannot get specified changeset无法获取指定的变更集
【发布时间】:2013-08-26 20:57:26
【问题描述】:

我正在开发一个构建控制器,以协助管理构建和部署。在这个过程中,我有必要为构建指定变更集编号。 在 Build Configuration 中,手动执行此操作时,与在 Process | 中设置“Get Version”参数相同。高级。

当我在 UI 中设置此值时,我可以在获得构建定义时对其进行修改。我所做的修改使构建按预期工作。

当 Get Version 留空时,我重复测试,通过代码加载参数,我总是得到最新版本,好像没有指定变更集。

这是我的代码:

    foreach (IBuildDefinition def in BuildDefinitions.SelectedItems)
{
    var process = WorkflowHelpers.DeserializeProcessParameters(def.ProcessParameters);                     
    process.Add("GetVersion", "C1111");
    // process["GetVersion"] = "C1133";
    def.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process);
    IQueuedBuild result = buildServer.QueueBuild(def);
}

看来构建定义可能在两种情况下包含不同的值,但我无法找到它。

我错过了什么?

【问题讨论】:

  • 这段代码在哪里运行?在构建过程中还是在您自己的过程中?
  • 这是我自己的进程,在客户端计算机上运行。

标签: tfsbuild tfs-sdk


【解决方案1】:

这个代替:

var request = def.CreateBuildRequest();
request.GetOption = GetOption.Custom;
request.CustomGetVersion = "C1234";
server.QueueBuild(request);

IBuildServer.QueueBuild(IBuildDefinition) 的文档说:

使用所有默认值将指定构建定义的构建排入队列 选项。

我猜它没有使用传入的定义中的大部分参数。

实际上,考虑一下,在请求上设置参数是有道理的,这是您的构建请求,您没有更改定义。

【讨论】:

  • 我测试了这段代码,但它没有产生正确的变更集。它执行构建,并针对最新的变更集交付。
  • 戴夫 - 我又读了 5 次您的回复,并根据您的回复找到了答案。显然,我没有逐字尝试您的代码,我仍在排队 def,而不是请求。谢谢。
  • @JamieMeyer - 我不知道还能尝试什么,我没有时间对此进行测试,但我是从逆向工程 TFSBuild.exe 获得的;)
  • 我错过的基本概念是,我呼吁其他人学习的基本概念是,通过 UI,当排队构建时,您正在排队构建请求,而不是构建定义。在我弄清楚这一点之后,所有的拼图都适合了。这在我能找到的任何地方都没有指出,因此我很困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2011-01-22
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多