VersionEye 开源持续更新工具

  • Grischa Ekart
  • 谢丽

2016 年 8 月 1 日

话题:JavaRuby持续集成DevOpsNode.js持续交付语言 & 开发

VersionEye开源了帮助更新项目依赖项的同名持续集成工具。该工具提出了“持续更新(continuous updating)”的概念,它可以提供许多软件库的更新通知、许可检查和安全漏洞信息。VersionEye 创建者 Robert Reiz 希望通过开源这款软件增加人们的信任和这个访问私人库的代码库的透明度。

该工具集成了 GitHub、Bitbucket 和 Stash,可以在使用Java、Ruby、Node.JS 和其他具有包管理器的常见编程语言编写的项目中搜索过期的依赖项。该工具最近增加了.NET 支持。

要使用 VersionEye,用户需要通过库账户登录,该软件会扫描所有项目,检测相应的依赖项,并定期报告过期库。借助许可白名单,用户还可以定义哪种许可类型适用于他们的项目,并开启安全漏洞警报。

对于流行的库,人们希望 Bug 和漏洞能够及时得到修复。Robert Reiz 是 VersionEye 的创始人兼首席执行官,他一直在跟踪更新。据他介绍,每年有超过 100 万个新版本发布,其中 90% 是小版本或补丁包,即按照定义不会破坏 API。不过,只有真正将这些更新集成到有关的应用程序中,才能获得更新的好处。研究显示,使用过期的依赖项存在如下风险

  • 安全:依赖项可能包含安全漏洞。当依赖项没有通过更新修复这样的漏洞时,系统就可能处于风险中;
  • 灵活性:最新依赖项让组织可以更快地响应变化,因为最近的依赖项版本比旧的依赖项版本更容易更新。新依赖项提供了新功能;
  • 稳定性:依赖项更新经常包含 Bug 修复以及整个系统稳定性和正确性的改进;
  • 兼容性:系统环境的外部更新可能会导致系统功能异常。

关于这款工具及其开源,InfoQ 有幸采访了 Robert。

InfoQ:用户如何从依赖项更新通知获益?

VersionEye 一直在关注来自不同包管理器的大约 100 万个软件库,因此,它知道特定库当前的版本。例如,它可以监控你在 GitHub 上的 package.json 文件,并每天通知你过期的依赖项。邮件通知的频率可以按项目定义,选项包括每天、每周、每月或从不。VersionEye 已经支持 12 种包管理器,比如 Maven、NPM、PIP,并且可以识别它们的语法。

InfoQ:有些软件库使用了著佐权许可,将它们用于企业环境会更加困难。VersionEye 能提供什么帮助?

VersionEye 爬取器也一直在收集软件许可的元信息。目前,我们已经有大约 600 万个软件工件的许可信息,而且数量还在增加。在许可选项卡中,VersionEye 会列出项目的所有依赖项及其许可。此外,还有一个表格展示不同许可在项目中的分布。根据需要,还可以创建一个白名单,只将特定的许可加入其中,例如 MIT 和 Apache。如果项目指定了许可白名单,那么 VersionEye 就会根据许可白名单检查依赖项使用的所有许可,如果有违反许可的情况,就会发送邮件通知。借助 VersionEye 的 Maven 插件,如果存在违反许可的情况,它甚至可以中断 CI 服务器上的构建过程。我们的部分企业客户就是那样使用 VersionEye 的。

InfoQ:安全漏洞检查是如何实现的?

VersionEye 一直在 5 个分别针对 Java、PHP、Ruby、Node.JS 和 Python 的安全数据库中积累安全信息,并且一直在将安全漏洞和包管理器中的相应工件做匹配。通过恰当的设置,例如 VersionEye Maven 插件、VersionEye Gradle 插件或 VersionEye SBT 插件,如果项目受到安全漏洞的影响,就可以中断 CI 服务器上的构建过程。当然,如果觉得漏洞不严重,也可以根据项目忽略安全漏洞。

InfoQ:为了有效地使用 VersionEye,我需要调整开发过程吗?

如果你的项目在 GitHub 或 Bitbucket 上,那么你就可以使用 GitHub 或 Bitbucket 账户免费注册,并简单地选择哪些项目文件应该由 VersionEye 监控。那样,你就会自动收到针对项目的邮件通知,而不必再做其他任何操作。

如果你想更进一步,则可以将 VersionEye 集成到构建和测试周期。几乎所有的主流构建工具都有针对 VersionEye 的原生插件,它们使用了公共 VersionEye API。这些插件会在构建时执行安全和许可合法情况检查,并在需要时中断构建过程。对于那些需要确保许多软件项目和开发人员开发质量的大公司而言,这非常有用。

InfoQ:是什么让您决定开源 VersionEye?

我们开源 VersionEye,是因为希望该软件得到更广泛的应用,同时也希望得到来自开源社区的贡献。

迄今为止,我们都是以 VMWare 镜像的形式出售 VersionEye 企业版。镜像的交付和防护过程非常耗时和令人不快。那虽然可行,但软件销售比较困难。企业对透明度和安全心存担忧,因为他们不知道这个他们要在自己的基础设施上运行的黑盒子里究竟发生了什么。

现在,我们不必再操心 VMWare 镜像的防护和代码的保密了,我们的客户也不必再担心这个黑盒子软件了。如果一切都开源了,那么整个的分发和维护就变得简单了许多,大公司也获得了他们想要的透明度和信任。

InfoQ:你们的商业模型发生了怎样的变化?

去年,我们出售软件,现在我们出售 VersionEye API 的访问权限、软件托管和服务支持。任何人都可以从 GitHub 上免费获取代码或者从 Docker Hub 上获取 Docker 镜像。但是,如果你启动自己的 VersionEye 实例,则本地数据库是空的。你可以通过一种同步机制从 VersionEye API 更新本地数据库,而那就是收费的了。或者,你可以运行自己的 Java 爬取器,但目前为止,没有人希望维护一整个爬取框架。从 VersionEye API 获取数据更简单也更便宜。

查看英文原文:Continuous Updating Tool VersionEye Now Open Source

JavaRuby持续集成DevOpsNode.js持续交付语言 & 开发