我有一个在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
答案 0 :(得分:1)
这里的问题是,您尝试并发运行的作业具有相同的共享工作区,一旦克服了这个障碍,您可以同时运行多个作业(根据Jenkins执行程序限制 - 可以控制来自Jenkins设置)。
我在Jenkins上实现的方法是将clone用于其他行为下的子目录。
然后我将其克隆到名为$BUILD_ID
的文件夹中。
例如:
当我运行“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。