【问题标题】:How do you pull multiple TFS repos into a single Jenkins job?如何将多个 TFS 存储库拉入单个 Jenkins 作业?
【发布时间】:2012-05-03 12:13:02
【问题描述】:

我有一个包含 2 个子文件夹 $/Repo/project 和 $/Repo/thirdparty 的仓库。我需要将这两个都拉到 Jenkins 中进行一次构建。自然地,我尝试只提取 $/Repo,但这给了我一堆其他项目以及错误的民意调查(每次将任何东西签入 $/Repo 时都会构建)。我尝试使用有效的 multi-scm 插件,但不保存配置(烦人,但并非不可用)。我尝试使用常规的 tfs 插件并手动将另一个 repo 的调用放入 windows 命令中(即使我将它们绑定到不同的文件夹,这也不起作用)。

解决此问题的最佳方法是什么?某种吸引第三方的子工作?修复多个 scm 插件?拉取项目时是否有一些 tfs 命令或触发器来拉取不同的 repo?

【问题讨论】:

  • 您是否对所有项目使用相同的存储库类型?全部来自 TFS?
  • 是的,它们都是同一个 repo 的一部分。
  • 那你……好吧……搞砸了。两种方法 - 在 TFS 插件中实现多 repo 功能(如 SVN 和 git 已经有),或者使用 multi-scm-plugin - 但它的设计考虑了不同的目的。无论如何,暂时没有选择。
  • 你认为解雇一个工作来拉取第三方的东西(比如一个单独的依赖工作)还是会解决的?
  • 知道为什么插件+手动调用不起作用吗?

标签: tfs jenkins jenkins-plugins


【解决方案1】:

我能够通过工作管道完成这项工作。这有点 hacky,但它确实有效。

我正在尝试构建的程序使用$/Department/Framework/Main(如workspace\Framework)和$/Department/Products/TheProgram/Main(如workspace\TheProgram)。

我在 Jenkins 中创建了三个工作,每个工作都在另一个“下游”:

  • Framework-Get:在 TFS 的项目路径 $/Department/Framework/Main 上触发正常源代码。没有构建步骤。
  • TheProgram-Get:在 TFS 的产品路径 $/Department/Products/TheProgram 上触发正常源代码。没有构建步骤。
  • TheProgram-Build:没有源代码控制。但构建步骤 xcopy 的来源来自上述两个步骤。然后,您可以运行正常的构建步骤。

TheProgram-Build 的第一个构建步骤是一个 windows 批处理命令:

REM ===================================== REM 首先获取Framework文件夹: rmdir /s/q 框架 mkdir 框架 xcopy /y /q /e ..\..\Framework-Get\Workspace\Framework Framework REM ===================================== REM 然后获取 TheProgram 文件夹: rmdir /s/q 程序 mkdir 程序 xcopy /y /q /e ..\..\TheProgram-Get\Workspace\TheProgram TheProgram

第二个构建步骤是对 ant 的简单调用。但是你可以在这里使用 msbuild 或任何你喜欢的东西。

【讨论】:

    【解决方案2】:

    Jenkins 的 TFS 插件目前不支持从多个位置检查源。 multiple-scm-plugin 可能是答案,但正如您在问题中指出的那样 - 在这一点上它真的不是一个选项。据我所知,确实有一些可能的解决方案供您测试:

    1. 在 TFS 中创建一个包含所有必需导入的工作区。我在与 TFS 的日常接触中使用此功能,尽管我从未有机会将它与 Jenkins 插件一起使用。它可能有效,也可能无效。
    2. 您可以使用,并且请 - 这是一个非常严肃的选择,至少对我而言 - git。有一个 git-tfs 并将所有需要的项目导入 git 存储库。将它们放在 git 中将为您打开许多可能性,包括为每个文件夹使用单独的存储库、使用 git 模块、git 外部......等等。所以,至少对我来说,这是一个有效的选择,尽管乍一看它似乎是一个丑陋的解决方法......

    【讨论】:

    • 感谢您的回答。我们确实在这里使用 git 来做一些事情,我非常喜欢它,但是当涉及到 .NET 开发人员时,他们希望使用 tfs。我将尝试我们讨论过的一些变通方法,看看效果如何。
    • 好吧,git-tfs 无论如何都会让他们使用 TFS,而 Git 只会被 Jenkins 覆盖。而且我确实理解他们为什么要使用 TFS(主要是与 VS.Net 紧密集成),但在故事的构建/归档/分发方面,Git 实际上更适合这项工作。我认为您应该尝试一下并使用更适合 YouJenkins 的那个,因为它们都不会干扰 VS.Net 开发人员和 TFS。跨度>
    【解决方案3】:

    TFS 插件支持隐藏 $\Repo 中您不感兴趣的文件夹的功能。签入隐藏文件夹不会触发构建。不幸的是,这可能是很多文件夹,而您只对其中两个感兴趣 - 您需要在添加新文件夹时维护隐藏文件夹的列表。

    我们避免使用 TFS 插件,而是使用 tfs 命令行通过 powershell 步骤编写 TFS 工作区的设置脚本。每个构建都指定了它想要的文件夹,并且脚本会注意隐藏/取消隐藏其余部分。

    【讨论】:

      【解决方案4】:

      我对此的解决方案是创建两个作业,一个仅下载您的依赖项,另一个用于构建。

      在我的例子中,我使用 Maven 属性管理构建,例如:

      pom.xml

      <properties>
        <my.dir>../MyDir</wsdl.dir>
      </properties>
      

      Jenkins 构建

      Goals clean package -U -Dmy.dir=${WORKSPACE}/../../another-build/workspace/MyDir
      

      【讨论】:

        【解决方案5】:

        我必须自己为 Jenkins 创建一个解决方法。这是使用 TF 和 powershell Snapin Microsoft.TeamFoundation.PowerShell 实现的。

        基本上工作流程如下:

        Get-TFsWorkspace(Powershell:检查工作区)

        TF Workspace /new(创建工作区)

        TF Workfold /unmap(使用它来删除在工作空间创建期间进行的默认 $/ 映射)

        TF Workfold /map(映射特定位置,即$/Repo/project)

        TF Scorch(如果有任何伪影,则移除任何伪影)

        TF Get(获取代码)

        人们可能还有其他方法,但这也可以让您使用 tf Workfold /cloak 功能。

        干杯,

        希望这会有所帮助。

        【讨论】:

          【解决方案6】:

          可以确认 Multiple SCM 0.5 与 Team Foundation Server 插件 4.0 一起使用

          然而,投票似乎确实中断了。

          【讨论】:

            猜你喜欢
            • 2018-05-12
            • 2019-02-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多