问题:如何防止Jenkins获取整个TFS工作空间?

我正在尝试在本质上是一个 monorepo 中构建一个项目。

使用 Jenkins 中的 TFS 插件,我将项目路径设置为我要构建的特定项目,并相应地在高级设置中设置本地工作文件夹。这样我就可以从monorepo获取所有项目依赖项,我需要使用Jenkinsfile中的脚本来构建这个项目。至少我是这么想的。

一旦我将 Jenkins 工作区映射到存储库根目录,Jenkins 似乎就构建了整个存储库,最终由于内存不足异常而失败,完全忽略了我在“项目路径”中设置的内容。

但即使它不会失败,为我们想要构建的每个项目都拥有整个 repo 的完整副本也不是一个现实的想法。

如何解决?停止使用 TFS 插件并在 Jenkinsfile 中执行所有 TFS 操作可能吗?

解答

假设您有$/Repo/project$/Repo/dependency。您只需要将这两个都拉入 Jenkins 进行一次构建。你自然而然地尝试了$/Reporoot,但这给了你一堆其他项目。

完全忽略了我在“项目路径”中设置的内容。您可以使用多个项目路径。

Jenkins 的 TFS 插件目前不支持从多个位置签出源代码**。

作为一种解决方案,正如 Ian W 指出的那样,您可以在 $\Repo 中隐藏您不感兴趣的文件夹。签入隐藏文件夹不会触发构建。不幸的是,根据您的评论,可能有很多文件夹。

另一个解决方案是创建多个作业,其中一些只是下载您的依赖项,另一个用于构建。

例如,在 Jenkins 中创建三个作业,每个作业都在另一个“下游”:

尝试使用 $/Repo/project(作为 workspace\TheProgram)和 $/Repo/dependency(作为 workspace\Framework)来构建。

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

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

REM u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d REM 先搞定

框架文件夹:rmdir /s/q 框架 mkdir 框架 xcopy /y /q /e

....\Framework-Get\Workspace\Framework Framework

REM u003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003du003d REM 然后获取程序

文件夹:rmdir /s/q TheProgram mkdir TheProgram xcopy /y /q /e

....\The Program-Get\Workspace\The Program The Program

第二个构建步骤是一个简单的调用来构建使用 msbuild 或任何你喜欢的东西。

您还可以将 job1 和 job3 组合在一起以简化您的工作流程,实际上只需要两个作业。

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐