You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Artifactory远程仓库无法自动下载未缓存构件问题咨询

解决Artifactory远程Jenkins插件仓库自动缓存构件的问题

问题本质

你碰到的情况是:Artifactory远程仓库的浏览器能展示从Jenkins官方源同步来的插件元数据,但直接访问这些插件的URL会返回404——因为这些构件还没被缓存到本地。只有手动点“下载”触发拉取后,URL才能正常访问。核心原因是直接访问虚拟展示路径不会触发Artifactory的远程构件拉取逻辑。

解决办法

1. 确认远程仓库的基础缓存配置

先检查你的Jenkins远程仓库是否开启了自动缓存:

  • 登录Artifactory后台,进入Admin > Repositories > Remote Repositories,找到目标仓库
  • 确保Basic Settings里的Store Artifacts Locally是勾选状态(默认开启,但可能被误修改)
  • 进入Advanced Settings,把Retrieval Cache Period设为0(表示未缓存的构件立即从远程拉取)

2. 用正确的方式触发缓存

直接访问仓库浏览器里的“文件URL”无法触发缓存,你可以用Artifactory的REST API来主动触发:

curl -X GET "http://<MY_URL>/artifactory/api/storage/jenkins-remote-plugin-2/chucknorris/1.4/chucknorris.hpi"

这个请求会让Artifactory自动从官方源拉取对应插件并缓存到本地,之后再访问原文件URL就能正常返回内容了。

3. 在Ansible剧本里集成自动缓存逻辑

用Ansible的uri模块调用上述API,批量触发插件缓存,完全避免手动操作:

- name: 自动触发Jenkins插件缓存
  uri:
    url: "http://<MY_URL>/artifactory/api/storage/jenkins-remote-plugin-2/{{ item.plugin_name }}/{{ item.plugin_version }}/{{ item.plugin_name }}.hpi"
    method: GET
    user: "{{ artifactory_user }}"
    password: "{{ artifactory_password }}"
    force_basic_auth: yes
  loop:
    - { plugin_name: 'chucknorris', plugin_version: '1.4' }
    # 这里可以添加所有需要提前缓存的插件信息

4. 确保索引同步正常

如果仓库浏览器里的插件列表不全,检查索引同步配置:

  • 在远程仓库的Advanced Settings里,把Index Type设为Remote Repository Index
  • 设置合理的Index Retrieval Interval,保证Artifactory定期同步Jenkins官方源的插件索引

补充说明

Artifactory仓库浏览器展示的插件路径是从远程源同步来的索引信息,并非本地已缓存的构件路径。只有当通过API、官方下载入口这类合法请求访问时,Artifactory才会触发远程拉取并缓存构件。直接访问虚拟展示路径的URL缺少触发缓存的逻辑,所以会返回404。

内容的提问来源于stack exchange,提问作者Sebastian Sommerfeld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:31:15