Artifactory作为包管理器的缓存机制

作为缓存机制的工件

作为JFrog生态系统团队的一名开发者,我依赖许多包管理器为我的构建下载工具。预构建工具,如Curl、CLI、wget、Maven、Gradle、npm等,用于构建最终的交付,作为构建的第一步,CI服务器会自动下载这些工具。依赖外部服务器下载这些预构建工具,有时会导致稳定性问题,也称为“环境问题”,这将破坏构建。这篇高级技术博客文章将展示如何使用Artifactory远程存储库克服这些挑战。这将是2部分系列的第一部分。

缺点:包管理器的内部存储库并不总是稳定的

我们有多种包管理器可供选择。Windows版本的Chocolatey, Mac/Linux版本的Homebrew, npm, Yum, APT, Docker, Flatpak, Snap等等。有时,当尝试从这些包管理器下载我们需要的工具时,我们可能会得到意想不到的5xx服务器错误。此外,从这些包管理器下载包可能很慢。当使用自动构建工具(如Travis CI, Jenkins, Appveyor等)时,这个问题变得更加严重。其结果是缓慢且不稳定的构建。处理这些环境问题的一种方法是再次手动运行构建。然而,这并不能解决问题。此外,在某些情况下,由于内部网络策略,甚至无法下载这些外部工具。

解决方案:使用人工远程存储库

一个Artifactory远程存储库作为位于远程服务器上的存储库的代理。对该Artifactory远程存储库的请求将首先尝试从本地缓存解析工件,如果在本地找不到工件,Artifactory将尝试从远程服务器解析工件,然后继续将该工件存储在本地缓存中,以供将来的请求使用。

使用远程存储库作为代理从包管理器下载包可以使您的构建更快、更稳定。它们还为您的构建提供了一个隔离和安全的环境,特别是如果您的组织使用如上所述的内部网络。

让我们通过一个使用Chocolatey包管理器的示例来查看实际操作。

重要提示:为了您的安全,请确保屏蔽控制台输出中的密码。

用例:Chocolatey

问题:503错误

我们的JFrog CLI测试使用Choco下载Gradle for Windows代理。我们经常注意到,由于以下503错误,一些构建失败:

失败- gradle(已退出1)- gradle未安装。安装过程中发生错误:远程服务器返回错误:(503)服务器不可用。服务不可用

决议

在与这个挑战斗争之后,我们找到的解决方案其实很简单。定义一个远程Nuget存储库在我们自己的Artifactory实例中,并使用它作为从Choco包管理器下载包的源代码。

分步指导

步骤1:配置工件存储库

在Artifactory中创建一个远程Nuget存储库:

  • 存储库密钥:choco
  • Url: https://chocolatey.org

步骤2:安装Choco软件包

使用匿名安装命令

安装 -s api/nuget/ Choco

使用身份验证访问

api/nuget/ Choco -u  -p 

在我的下一篇博文中,我将继续介绍其他工具的其他用例,包括Homebrew和Yum。你自己试试这些吧!