Jenkins Windows代理从Artifactory下载失败:临时目录权限异常
Jenkins Artifactory插件Windows代理下载权限问题解决方案
问题概述
Jenkins更新至2.414.2后,Windows 10代理节点(以系统账户NT AUTHORITY\SYSTEM作为服务运行,代理版本3131.vf2b_b_798b_ce99)使用Artifactory插件3.18.11下载文件时失败。核心报错为无法读写自动生成的临时目录(如C:\Windows\Temp\14315663966815098879...),该目录仅machinename$账户拥有完全控制权限,迁移代理临时目录后问题依旧。
解决方案
1. 手动指定Artifactory插件临时目录
- 在Jenkins全局配置中找到Artifactory插件设置,手动指定一个系统账户完全可控的临时目录(如
C:\Jenkins\ArtifactoryTemp),确保NT AUTHORITY\SYSTEM对该目录拥有完全控制权限。 - 若全局配置无法生效,可在Job级别配置中覆盖临时目录设置,指定到当前Job工作区内的临时文件夹,避免系统Temp目录的权限限制。
2. 预创建临时目录并赋予权限
在Artifactory下载步骤前添加PowerShell脚本,手动创建临时目录并配置正确权限:
# 生成随机临时目录名 $tempDir = Join-Path $env:TEMP (Get-Random) # 创建目录 New-Item -ItemType Directory -Path $tempDir -Force | Out-Null # 获取目录ACL $acl = Get-Acl $tempDir # 添加系统账户完全控制权限 $systemAccount = New-Object System.Security.Principal.NTAccount("NT AUTHORITY\SYSTEM") $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( $systemAccount, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow" ) $acl.SetAccessRule($accessRule) Set-Acl $tempDir $acl # 将临时目录路径输出为环境变量,供后续Artifactory步骤使用 Write-Output "ARTIFACTORY_TEMP_DIR=$tempDir" | Out-File $env:BUILD_WORKSPACE\temp_dir.env -Encoding utf8
随后在Artifactory下载配置中,引用该环境变量作为临时下载路径。
3. 调整插件版本适配Jenkins
- 尝试降级Artifactory插件至之前工作正常的版本(如3.17.x系列),验证是否解决兼容性问题。
- 或升级至最新版Artifactory插件,查看官方是否已修复该权限相关的bug。
4. 修改代理节点临时环境变量
- 修改Windows代理节点的系统环境变量,将
TEMP和TMP指向非系统目录(如C:\Jenkins\AgentTemp),确保NT AUTHORITY\SYSTEM对该目录有完全控制权限。 - 重启Jenkins代理服务,使环境变量生效。
5. 禁用并发下载功能
报错显示并发下载线程无法找到路径,可能是并发场景下的目录权限同步问题:
- 在Artifactory下载配置中禁用并发下载选项,改为单线程下载,验证是否能正常创建目录并写入文件。
- 若单线程正常,可暂时保持该配置,等待插件官方修复并发场景的权限问题。
内容的提问来源于stack exchange,提问作者pete
相关产品推荐
相关产品推荐

