尝试使用MSBuild Extensions时Jenkins Build失败 - 无法确定源控制服务器

时间:2013-10-15 20:50:49

标签: tfs msbuild jenkins tfs2010 build-automation

我正在尝试将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>

我认为这与缺少工作空间有关 - 但詹金斯把所有东西都拉得很好,所以工作区不应该存在吗?

当我开始对此秃顶时,我们会感激一些指导。

1 个答案:

答案 0 :(得分:1)

支持材料:

Can you do a TFS get without needing a workspace?

解决方案1:

绕过TFS伏都教,获取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

这可能有一些内置的工作区voodoo,在变更集中没有。

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

我看到了这个:

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";