如何防止Jenkins获取整个TFS工作空间?
问题:如何防止Jenkins获取整个TFS工作空间?
我正在尝试在本质上是一个 monorepo 中构建一个项目。
使用 Jenkins 中的 TFS 插件,我将项目路径设置为我要构建的特定项目,并相应地在高级设置中设置本地工作文件夹。这样我就可以从monorepo获取所有项目依赖项,我需要使用Jenkinsfile中的脚本来构建这个项目。至少我是这么想的。
一旦我将 Jenkins 工作区映射到存储库根目录,Jenkins 似乎就构建了整个存储库,最终由于内存不足异常而失败,完全忽略了我在“项目路径”中设置的内容。
但即使它不会失败,为我们想要构建的每个项目都拥有整个 repo 的完整副本也不是一个现实的想法。
如何解决?停止使用 TFS 插件并在 Jenkinsfile 中执行所有 TFS 操作可能吗?
解答
假设您有$/Repo/project
和$/Repo/dependency
。您只需要将这两个都拉入 Jenkins 进行一次构建。你自然而然地尝试了$/Repo
root,但这给了你一堆其他项目。
完全忽略了我在“项目路径”中设置的内容。您可以使用多个项目路径。
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 组合在一起以简化您的工作流程,实际上只需要两个作业。
更多推荐
所有评论(0)