如果从Git中提取项目代码,可以在Jenkins中同时执行构建吗?

时间:2018-01-02 12:08:40

标签: git jenkins jenkins-pipeline

我有一个在Jenkins中运行一系列自动化测试的项目,项目代码是从存储在Microsoft TFS中的Git中提取的,当我试图在Jenkins中同时执行两个构建时我似乎得到了诸如JAR文件相关异常之类的错误,当使用从Git中提取的相同项目代码时,甚至可以同时运行两个作业吗?

示例例外1:

  11:22:14 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project AutoFramework: Failed to clean project: Failed to delete C:\Users\Joe.Blogs\Desktop\AutomatedTest\AutoFramework\target\generated-sources 

示例例外2:

 Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project AutoFramework: Failed to clean project: Failed to delete C:\Users\Joe.Blogs\Desktop\AutomatedTest\AutoFramework\target\surefire\surefirebooter537025062701550661.jar

1 个答案:

答案 0 :(得分:1)

这里的问题是,您尝试并发运行的作业具有相同的共享工作区,一旦克服了这个障碍,您可以同时运行多个作业(根据Jenkins执行程序限制 - 可以控制来自Jenkins设置)。

我在Jenkins上实现的方法是将clone用于其他行为下的子目录。

然后我将其克隆到名为$BUILD_ID的文件夹中。

enter image description here

例如:

当我运行“Job-A”工作时(假设内部版本号为#55),其$WORKSPACE位于/var/lib/jenkins/workspace/Job-A/ 当git clone运行时,它会将其克隆到/var/lib/jenkins/workspace/Job-A/55 - 然后你必须确保其余的工作在嵌套的工作区中工作,而不是$WORKSPACE

我在作业开始时定义一个名为NESTED_WORKSPACE = $WORKSPACE/$BUILD_ID的变量,然后使用$WORKSPACE

而不是$NESTED_WORKSPACE

这使得所有内容都与您的构建相关,并允许您同时运行作业。

要记住的一个大问题 - 如果你的git repo很大,这肯定会杀死你的Jenkins盒子,因为每个构建都是克隆,确保以某种方式清理旧作业,或确保你有足够的存储空间。

在我的情况下,这实际上是一个大问题,因为回购最终得到100的MB(...不要问我为什么-_- ..),但最终我不得不实施稀疏结账,只克隆了文件我需要 - 我使用自定义脚本而不是使用git插件,只是FYI。