首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于Jenkins的Maven构建-上游版本范围解析为在并发作业中构建的版本。

基于Jenkins的Maven构建-上游版本范围解析为在并发作业中构建的版本。
EN

Stack Overflow用户
提问于 2020-11-13 11:37:35
回答 2查看 170关注 0票数 0

我们有一个Jenkins构建,在它的初始阶段,它试图通过版本范围来确定一些依赖项的最新部署版本,这些版本也是由同一个Jenkins实例构建的。每个构建都是针对多个工件的,所有构件都有一个共享版本,因此我们希望选择已经完成的最新版本。为此,我们使用了一个特殊的pom,它依赖于特定的pom-这些都是由其他构建最后部署的。

问题是,如果另一个构建正在运行,但尚未部署pom,则maven的版本范围解析将最终为正在进行的构建选择版本,然后失败,因为一些依赖项尚未构建。

这不是由依赖关系启动的下游构建。在任何情况下,我们都尝试过“为下游构建启用隔离解决方案”和“解决来自Artifactory的工件”,但这两种方法都没有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-13 11:37:35

这个问题是由Jenkins maven本地存储库造成的--在当前的配置中,这个问题是在构建之间共享的。因此,正在运行的构建成功地获取了尚未部署的已安装的poms。

当我们解析版本范围时,我们通过添加-Dmaven.local.repo=${WORKSPACE}/.m2/repository来解决这个问题--通过这种方式,这个阶段的构建将与其他并发构建隔离开来。

票数 0
EN

Stack Overflow用户

发布于 2020-11-13 17:27:29

如果项目是一个普通的UI "maven项目“,那么就有一个使用工作区特定Maven存储库缓存的”使用私有maven存储库“复选框。

通常使用由Maven确定的本地Maven存储库--确切的过程似乎没有文档化,但它是~/.m2/存储库,可以被in ~/.m2/see ings.xml覆盖(有关更多细节,请参阅参考资料)。这通常意味着在同一个节点上执行的所有作业共享一个Maven存储库。这样做的好处是可以节省磁盘空间,但缺点是有时这些构建可能会相互干扰。例如,尽管POM中的任何一个存储库都没有构建依赖项,但您的构建可能会不正确地成功,因为您的本地存储库中有所有依赖项。

还有一些关于并发Maven进程试图使用同一个本地存储库的报告中的问题。

当选中此选项时,Jenkins将告诉Maven使用$工作区/.存储库作为本地Maven存储库。这意味着每个作业将只为自己获得自己的独立Maven存储库。它以牺牲额外的磁盘空间消耗为代价解决了上述问题。

在使用此选项时,请考虑设置一个Maven工件管理器,这样您就不必经常访问远程Maven存储库。

如果您希望在Jenkins上执行的所有Maven作业中激活此模式,请参阅这里描述的技术。

如果这是一个管道作业,则它们是一个mavenLocalRepo设置,请参见:https://plugins.jenkins.io/pipeline-maven/

如果这是一项自由式的工作,你唯一的选择就是用手去做这个选择。

通过使用此选项,Jenkins将告诉Maven使用自定义路径作为本地Maven存储库,方法是使用-Dmaven.repo.local (如果指定为相对路径),则该值将根据工作区根目录而不是当前工作目录解析。即。如果指定了.repository值,则为$

/.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64827032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文