【问题标题】:Jenkins Build Fails when trying to using MSBuild Extensions - Unable to determine the source control server尝试使用 MSBuild 扩展时 Jenkins 构建失败 - 无法确定源代码控制服务器
【发布时间】:2013-10-23 19:45:03
【问题描述】:

我正在尝试将 Jenkins 与 MSBuildExtensions 和 TFS 结合使用来转换 AssemblyInfo.cs

在我的开发盒上,一切正常,包括与 TFS 的连接,它正确返回变更集编号。

当我签入变更集并尝试在 Jenkins 服务器上构建时,我收到一个错误,并且此命令导致构建中断:

  Resolve TF.exe path
  TF.exe path resolved to: C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\..\IDE\tf.exe
  TF Operation: GetChangeset
  Executing C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\..\IDE\tf.exe changeset   /login:myDomain\SomeUser,myPassword /latest /noprompt

C:\Program Files\Jenkins\jobs\DemoVersioning\workspace\VersioningDemo\VersioningDemo.csproj(513,3): error : Exit Code 100. Nothing Succeeded: Unable to determine the source control server.

在我的 msbuild 脚本中,这是我在“BeforeBuild”上运行的 TFS 命令:

<TfsSource TaskAction="GetChangeset"
                     Login="myDomain\someUser,password">
    <Output TaskParameter="Changeset" PropertyName="ChangeSet" />
</TfsSource>

我认为这与缺少工作区有关 - 但 Jenkins 将所有内容都拉下来,所以工作区不应该存在吗?

一些指导将不胜感激,因为我开始为此秃顶。

【问题讨论】:

  • 您是否在构建后重新检入任何代码?
  • 没有代码被重新签入。因为手动增加主要和次要版本号,变更集应该始终是我们的最新版本。

标签: tfs msbuild jenkins build-automation


【解决方案1】:

支持材料:

Can you do a TFS get without needing a workspace?

解决方案 1:

绕过 TFS voodoo,为 TFS 获取 Git,然后运行以下命令。
(如果你知道这个世界,这将相当于“svn.exe 'export'”。

"C:\MyProgFiles\GitTF\git-tf.cmd" clone http://MyCoolteamfoundationserver:8080/tfs/ $/MySolution/

解决方案 2:

创建工作区并对其进行映射,然后“获取”代码。

这是一个您可以模仿的 .bat 版本:

set __MYWORKSPACENAME=CI_TEMP_WORKSPACE

set __BASEDIRECTORYFINAL=c:\ci_build_stuff\

MD %__BASEDIRECTORYFINAL%
CD %__BASEDIRECTORYFINAL%

set __tfExe=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\TF.exe

"%__tfExe%" workspace /new %__MYWORKSPACENAME% /collection:http://my_super_cool_teamfoundationserver:8080/tfs/my_cool_projects /noprompt

"%__tfExe%" workfold /map $/MyTFSPath %__BASEDIRECTORYFINAL%\SXA

"%__tfExe%" get %__BASEDIRECTORYFINAL%\MyTFSPath\ /recursive /noprompt


set __BASEDIRECTORYFINAL=
set __MYWORKSPACENAME=
set __tfExe=

进一步的想法:

结帐

http://msbuildextensionpack.codeplex.com/workitem/11709

其中可能有一些内置的工作区巫术,但在变更集上不存在。

获取源代码并环顾四周,它会告诉你发生了什么。

我看到了这个:

http://msbuildextensionpack.codeplex.com/SourceControl/latest#Solutions/Main/TFS/TeamBuild.cs

   public class TeamBuild : BaseTask
    {
        private const string GetLatestTaskAction = "GetLatest";
        private const string QueueTaskAction = "Queue";
        private const string RelatedChangesetsTaskAction = "RelatedChangesets";
        private const string RelatedWorkItemsTaskAction = "RelatedWorkItems";

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 2016-07-09
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多