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等)时,这个问题会恶化1000倍。结果是缓慢和不稳定的构建。处理这些环境问题的一种方法是手动再次运行构建。然而,这并不能解决问题。此外,在某些情况下,由于内部网络策略,甚至不可能下载这些外部工具。
解决方案:使用Artifactory远程存储库
一个Artifactory远程存储库作为位于远程服务器上的存储库的代理。对该Artifactory远程存储库的请求将首先尝试从本地缓存解析该工件,如果无法在本地找到该工件,Artifactory将尝试从远程服务器解析该工件,然后继续将该工件存储在本地缓存中,以供将来的请求使用。
使用远程存储库作为从包管理器下载包的代理可以使构建更快、更稳定。它们还为您的构建提供了一个隔离的、安全的环境,特别是如果您的组织使用如上所述的内部网络。
让我们通过一个使用Chocolatey包管理器的示例来看看它的实际效果。
重要提示:出于安全考虑,请确保从控制台输出屏蔽密码。
用例:Chocolatey
问题:503错误
我们的JFrog CLI测试使用Choco下载Gradle for Windows代理.我们经常注意到,由于以下503错误,一些构建失败:
失败- gradle(退出1)- gradle未安装。远程服务器返回错误:(503)服务器不可用。服务不可用
决议
在与这个挑战作了一番挣扎之后,我们找到的解决办法其实很简单。定义一个远程Nuget存储库在我们自己的Artifactory实例中,并使用它作为从Choco包管理器下载包的源代码。
分步指南
步骤1:配置Artifactory存储库
在Artifactory中创建一个远程Nuget库:
- 存储库密钥:choco
- Url: https://chocolatey.org
步骤2:安装Choco包
使用匿名安装命令
Choco install-s api/nuget/ Choco
使用经过身份验证的访问
Choco install-s api/nuget/ Choco -u -p
在下一篇博文中,我将继续介绍其他工具的其他用例,包括Homebrew和Yum。自己试试吧!
