4

我们必须定期设置新的构建环境,而这个过程似乎并不那么简单。今天我有了一台新的构建机器,第一次 Maven 构建非常慢,我想澄清为什么性能如此糟糕。但是怎么做呢?

我们的背景是:

  • 我们使用多台构建机器,每个项目都有自己的。
  • 每台构建机器都有类似的设置,因此项目可以立即启动,无需进行大量配置。
  • 我们预先配置了以下工具:
    • Hudson(目前是 2.1.1,但会改变)
    • 神器2.3.3.1
    • 声纳
    • Hudson、Artifactory 和 Sonar 配置了自己的 Tomcat
    • Maven 2.2.1 和 Maven 3.0.3(没有用户配置,只有安装有settings.xml
    • Ant 1.7.1 和 Ant 1.8.2(此处不相关)
    • 颠覆 1.6 客户端

所有工具都应该协同工作,尤其是存储库链应该是:

  1. 构建机器 Maven 存储库
  2. 建造机器神器
  3. 中央公司 Artifactory(充当世界的镜像和缓存)
  4. Maven 中央(和其他存储库)

因此,当 Maven 构建需要解析依赖项时,将首先在本地 Maven 存储库中查找,然后在本地 Artifactory 存储库中查找,然后在中央 Artifactory 存储库中查找,然后才在 Internet 上查找。

我们通常必须使用代理连接到互联网,我们在内联网中不需要它。

第一个构建(Maven Hello World)在大约 45 分钟内完成。在那个时候,所有的引导都在发生,但我会认为通过使用我们的存储库链(中央存储库被很好地填充),构建会快得多。所以我认为调试的重点将是网络,本地构建不是问题。所以Maven和Artifactory的配置和交互正在考虑中。

你如何调试这样的环境?我可以访问构建机器(作为 sudo)和中央存储库,但我不知道如何开始,要证明什么,去哪里看。那么您的经验是什么,您想分享哪些提示和技巧?

4

1 回答 1

0

以下是我到目前为止所做的一些事情。如果您有其他建议,欢迎您!

我怀疑存储库链是邪恶的根源,所以我首先解决了这个问题。原因是:

  • 本地机器(hello world 程序)上的实际构建可能以毫秒为单位,但不是分钟。
  • 网络有所作为,所以首先攻击它。

如果在本地找不到某些东西,则存储库链很有趣。以下是确保这种情况的步骤:

  • 对于 Maven,删除本地缓存的内容。如果本地缓存已满,您不知道是否在本地缓存或其他地方找到了资源。(至少在最后这样做,如果其他一切都恢复正常的话。)
  • 对于 Artifactory,还要找到该缓存,并通过删除其内容来清理它。它只是一个缓存,所以它将被填充一个新的。
  • 如果您使用智能浏览器来衡量查找,请确保您要求的内容不在浏览器的缓存中。
  • 否则使用诸如wget请求资源之类的工具。
  • 尽量减少失败的来源。因此,请尝试将查找的长距离划分为您控制的较小段。
  • 不要使用 Maven 进行查找,首先从 Artifactory 存储库(仅)开始,然后再使用 Maven。

这导致了我想做的以下测试。每次我确保满足之前的先决条件时:

  1. https://<my-project-artifactory>/repo/<my-pom>。期待:

    • 本地查找将失败,因此必须在中央公司 Artifactory 的远程存储库中查找资源。
    • 可能的影响可能来自代理、工件查找。

    结果:查找一个简单的 POM 需要 ~ 30 秒。那太多了。

  2. 删除代理。使用wget,有一个选项--no-proxy可以做到这一点。期望:

    • 更快的查找。

    结果:根本没有变化,所以代理不是原因。

  3. https://<my-project-artifactory>/libs-snapshots-company/<my-pom>。所以把虚拟仓库改成真正的远程仓库。期待:

    • Artifactory 知道在哪里进行查找,因此它会快得多。

    结果:立即找到了POM,所以这30秒是Artifactory在做查找。但这可能是什么原因呢?

  4. 在 Artifactory 中删除了所有远程和虚拟存储库(只留下我们公司的和缓存的 Maven 中心)。但再次使用https://<my-project-artifactory>/repo/<my-pom>。期待:

    • Artifactory 会更快地找到存储库。

    结果:POM 瞬间出现,无法测量。

  5. 然后我很勇敢,刚刚开始构建(本地缓存为空)。然后构建需要 5 秒(而不是同一天早上的 15 分钟)。

所以我想我现在已经更好地理解了可能出现的问题,还有很多问题。请添加您的想法作为答案,您将获得他们的声誉!

于 2011-10-06T09:18:54.267 回答