我在本地跑明明成功的,为什么在你平台跑就报错?

用户在 Jenkins 上跑构建时,失败了,把日志截图给我看,如下图:

在过去几个月,每个星期都会有一两个 Jenkins 用户就会给我发送类似的错误日志。

这样的日志,我通常回:请检查你们的依赖,是不是有依赖没有上传到咱们的 Nexus 仓库。验证方法是先在本地删除你的 .m2 目录,然后再执行一次构建。

当用户业务开发比较急的时候,他们还会说本文标题中的那句话。有些抱怨的意思。我都已经习惯了。

出现这样的情况,我总结大概会有以下原因:

  1. 用户对于 Maven 这类构建工具不熟悉。

  2. 用户对于依赖管理不重视,或者没有依赖管理的意识。

  3. 用户根本不看日志。

面对这三个原因,我就在思考:我们 DevOps 平台能做些什么呢?

我觉得 DevOps 平台是不是可以直截了当地告诉用户:

xxx 依赖在 Nexus 仓库(maven.abc.com)中没有找到,请您先 deploy 该依赖到 Nexus 仓库后,再执行此任务。

如果能检测到缺少的依赖放在哪个代码仓库就更好了。因为这样,就可以提示用户直接到该代码仓库的 deploy 了。

这样的技术,我称为依赖AI管理技术(笑)。当然,这样的技术,应该可以应用于所有的语言。

同时,我们将这些数据(依赖管理失误)统计起来,就可以看出一个团队在依赖管理方面的能力表现了,进而可以有效的对团队进行培训,以提高相应的能力。

回到本文主题,当用户自行检查依赖后,大多数时候,用户就不会来找我了,因为问题已经解决了。可是有一次,用户还是说不行,他已经把 .m2 删除,并把依赖包上传到 Nexus 仓库了。

我检查了他的 pom.xml 文件,发现版本号的定义也是正确的。可是,放在 Jenkins 上执行时,使用的还是旧版本的类的定义。

这就奇怪了。这种情况还是头一回遇到。来来回回检查了好几次,查了好久才知道,是因为用户 deploy 依赖到 Nexus 时,deploy 的是相同的版本号,就是覆盖了原来的版本的包,但是版本没有升级。而 Maven 检测到本地就该版本的依赖,就不会重新下载了。最后,就是大家看到的,本地可以,但是 Jenkins 上就是不行。

最后的解决方式是:

  1. 用户 deploy 一个新的版本到 Nexus 仓库,并在 pom.xml 中使用新的版本。

  2. 我们将 Nexus 设置为不允许重复 deploy。

小结

经过这次事件,我们可以看出,依赖管理对于工程质量的重要性。因为,依赖管理不当,很有可能在连开发人员都不知情的情况下引入Bug。

而 DevOps 平台能实现依赖AI管理技术将有效的提升工程质量。

END

aosp 本地版本管理_谈 DevOps 平台实施:我在本地跑明明成功的,为什么在你平台跑就报错?...相关推荐

  1. aosp 本地版本管理_本地代码版本管理

    注意事项: 一, 先更新别人提交的,然后在把自己修改的提交上去 ,避免和别人的冲突. 二.WIN7中关于不显示SVN图标的解决方案: //_20151221 [关于在AndroidStudo中进行SV ...

  2. mysql注入如何读取本地文件_如何通过SQL注入获取服务器本地文件

    写在前面的话 SQL注入可以称得上是最臭名昭著的安全漏洞了,而SQL注入漏洞也已经给整个网络世界造成了巨大的破坏.针对SQL漏洞,研究人员也已经开发出了多种不同的利用技术来实施攻击,包括非法访问存储在 ...

  3. maven设置从本地读_如何在Eclipse中更改Maven本地存储库

    通常,这些回答了以下问题:如何更改用户设置文件? 但是我想回答的问题是如何更改本地Maven存储库位置. 答案是您必须编辑settings.xml. 如果文件不存在,则必须创建它. 您可以在窗口> ...

  4. react本地储存_如何在React项目中利用本地存储

    react本地储存 以及为什么要这么做. 本地存储是现代Web浏览器固有的Web API. 它允许网站/应用程序在浏览器中存储数据(简单和有限),从而使数据在以后的浏览器会话中可用. 在开始学习本教程 ...

  5. mysql导出表到新建_用navicat导出mysql的数据库后,再用navicat导入到新建的数据库,报错。...

    如题.错误如下[Err]1146-Table'tesss.v_employee_superior_2'doesn'texist[Err]CREATETABLE`wf_type_subject_sc_t ...

  6. Mysql报错1091解决办法_关于MYSQL:外键删除后,查询表发现外键依旧存在,再删一次会报错:原因及相关解决办法...

    1.创建表test6:外键名为test3_fk mysql> create table test6( -> id int, -> test_name varchar(32), -&g ...

  7. 报错 插入更新_自增主键,三类插入测验答案,在这里。

    <三类插入与自增键的关系>一文,基本解答了<自增键四道测验题>,仍有水友要求贴答案,原理都解释了,copy语句执行下,真的难么?画外音:你们赢了,我还是贴一下执行结果.实验一. ...

  8. _C语言_结构体_vistodio_c报错.+初学者的自闭瞬间。哎。

    在C语言中一直用不好子函数, 前几天看书+视频教学终于弄懂了, 想着用大一上做到的课设重新打一遍 工资纳税系统(不能说是系统就是一个控制台窗口连程序都算不上哈哈哈但是当时做出来的时候真的就是蛮高兴地) ...

  9. 谈DevOps研发运维一体化解决方案PPT制作

    今天准备谈下DevOps产品解决方案PPT材料的制作和修订,在前面实际我分享过云原生和DevOps的相关技术解决方案材料,但是实际在和客户交流后并没有达到很好的效果,简单总结来说就是材料太偏技术化,没 ...

最新文章

  1. 让机器“看见”:图像数据的特征提取方法
  2. CodeIgniter 2.X 于 PHP5.6 兼容错误
  3. 我将 20 年前开发的操作系统迁移到 .NET 6,竟然成功了!
  4. Photoshop cs6中kuler和mini bridge打开是空白的解决方法
  5. 通过Server-U设置网络共享文件夹的步骤和注意事项
  6. Android开发之TextView排版问题
  7. Java中多实现接口的一个好处
  8. Visual C# 2008+SQL Server 2005 数据库与网络开发--第13章 使用菜单和对话框
  9. 云服务器怎么增加d盘_怎么租用美国云服务器比较便宜?
  10. Linux服务器基本安全加固
  11. 国内C语言教材中几种值得商榷的说法
  12. 考研英语 - word-list-23
  13. Python三十个常见的脚本汇总
  14. android手机微信收藏功能实现,微信小程序实现收藏功能
  15. excel表格操作之数据分级统计
  16. 《鹰猎长空》讲述戏曲与电影的渊源
  17. Web大学生网页作业成品:基于html制作中国科技发展网站设计题材【航天之路7页】HTML+CSS+JavaScript
  18. 链表--逆时针旋转一个链表
  19. WordPress批量修改数据库内文章内容文字关键字标题
  20. 2013年:各大IT公司待遇【转载】

热门文章

  1. python实现多人聊天udp_python—多任务版udp聊天机器人
  2. 2异常处理_Java处理异常2种机制关键字区别解析
  3. 1-1 顺序表操作集 (20 分)
  4. 计算机找不到管理无线网络,电脑wifi密码忘了 并且找不到管理无线网络该怎么处理?...
  5. 检查mysql的replication_MySQL Replication需要注意的问题
  6. decorators 参数_Python Decorators(二):Decorator参数
  7. python十条建议_十条建议帮你提高Python编程效率
  8. vscode python环境配置_用VScode配置Python开发环境
  9. c语言如何编写mysql客户端_【C/C++学院】(23)Mysql数据库编程--C语言编程实现mysql客户端...
  10. 【转】深入浅出理解有限状态机