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

如何从JFrog仓库或GitHub获取JF CLI最新版本并实现增量更新?

实现JF CLI的PowerShell增量更新脚本

下面是一套完整的PowerShell脚本逻辑,能帮你自动对比本地JF CLI版本与最新版本,只在需要时下载更新:

步骤1:获取本地已安装版本

先检查系统里有没有装JF CLI,有的话提取版本号:

$localVersion = $null
$jfPath = Join-Path $env:SYSTEMROOT system32 jf.exe
if (Test-Path $jfPath) {
    # 执行jf --version,提取版本号(输出格式类似"jf version 2.45.0")
    $versionOutput = & $jfPath --version 2>&1
    if ($versionOutput -match 'jf version (\d+\.\d+\.\d+)') {
        $localVersion = $matches[1]
        Write-Host "本地已安装版本: $localVersion"
    } else {
        Write-Warning "无法解析本地JF CLI版本,将执行全新安装"
    }
} else {
    Write-Host "未检测到本地JF CLI,将执行全新安装"
}

步骤2:获取最新版本号

推荐用GitHub Releases API,返回的JSON结构清晰,解析更可靠:

# 请求GitHub API获取最新版本
try {
    $latestRelease = Invoke-RestMethod -Uri "https://api.github.com/repos/jfrog/jfrog-cli/releases/latest" -ErrorAction Stop
    $latestVersion = $latestRelease.tag_name.TrimStart('v')  # 标签是v2.xx.x,去掉前缀v
    Write-Host "最新版本: $latestVersion"
} catch {
    Write-Error "获取最新版本失败: $_"
    exit 1
}

如果想用JFrog官方源的话,可以通过访问latest目录的重定向来获取版本号:

# 备选:从JFrog官方源获取最新版本
try {
    $latestRedirect = Invoke-WebRequest -Uri "https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/latest/" -MaximumRedirection 0 -ErrorAction SilentlyContinue
    # 重定向地址会包含版本号,比如https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/2.45.0/
    if ($latestRedirect.Headers.Location -match 'v2-jf/(\d+\.\d+\.\d+)/') {
        $latestVersion = $matches[1]
        Write-Host "最新版本: $latestVersion"
    }
} catch {
    Write-Error "获取最新版本失败: $_"
    exit 1
}

步骤3:版本对比与更新

对比本地版本和最新版本,只有当版本不一致时才下载:

# 版本对比逻辑(处理本地版本不存在的情况)
if (-not $localVersion -or $localVersion -ne $latestVersion) {
    Write-Host "开始下载最新版本..."
    $downloadUrl = "https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/$latestVersion/jfrog-cli-windows-amd64/jf.exe"
    
    # 先下载到临时文件,避免覆盖正在使用的jf.exe
    $tempPath = Join-Path $env:TEMP "jf_temp.exe"
    try {
        Invoke-WebRequest -Uri $downloadUrl -OutFile $tempPath -ErrorAction Stop
        
        # 替换系统目录里的文件(需要管理员权限)
        if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
            Write-Error "需要管理员权限才能更新系统目录中的jf.exe"
            exit 1
        }
        
        # 先关闭可能正在运行的jf进程(可选,防止文件被占用)
        Get-Process -Name jf -ErrorAction SilentlyContinue | Stop-Process -Force
        
        Copy-Item -Path $tempPath -Destination $jfPath -Force
        Write-Host "JF CLI已更新至版本 $latestVersion"
    } catch {
        Write-Error "下载或更新失败: $_"
        exit 1
    } finally {
        # 清理临时文件
        if (Test-Path $tempPath) { Remove-Item $tempPath -Force }
    }
} else {
    Write-Host "本地JF CLI已是最新版本,无需更新"
}

注意事项

  • 脚本需要管理员权限才能写入C:\Windows\System32目录,运行时右键选择"以管理员身份运行"。
  • 如果本地有JF进程在运行,替换文件会失败,脚本里加了强制关闭进程的逻辑,根据你的需求可以调整。
  • GitHub API有请求频率限制,如果你是在自动化环境中频繁运行,建议加个缓存逻辑(比如把最新版本号存在本地文件,几小时内不用重复请求API)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:47:06