You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Jenkins自由风格任务:PowerShell从Git复制文件到Windows主机路径找不到问题排查

解决Jenkins PowerShell脚本无法找到工作区文件的问题

你的问题根源很明确:你在Invoke-Command里的Copy-Item是在目标远程服务器上执行的,而不是Jenkins代理机器。脚本里的.Solr_config会去远程服务器的当前工作目录(也就是执行PowerShell的用户文档文件夹)找文件,但Git拉取的文件明明在Jenkins的工作区里,远程机器当然找不到。

下面给你修正后的PowerShell脚本,完美适配你的Jenkins自由风格项目:

# 获取Jenkins工作区的绝对路径(Jenkins内置环境变量,直接用就行)
$jenkinsWorkspace = $ENV:WORKSPACE
# 拼接出Git拉取的Solr_config目录的完整路径
$sourceFolder = Join-Path -Path $jenkinsWorkspace -ChildPath "Solr_config"

# 转换密文绑定的密码为安全字符串,创建凭证对象
$securePassword = ConvertTo-SecureString "$($ENV:loginPassword)" -AsPlainText -Force
$remoteCredential = New-Object System.Management.Automation.PSCredential ($ENV:loginUsername, $securePassword)

# 建立到远程Windows服务器的会话
$remoteSession = New-PSSession -ComputerName windows_Host_server -Credential $remoteCredential

# 直接从Jenkins工作区复制文件到远程服务器的目标目录
Copy-Item -Path $sourceFolder -Destination "E:\install" -Recurse -Force -ToSession $remoteSession

# 用完会话记得关闭,避免资源占用
Remove-PSSession -Session $remoteSession

关键细节说明:

  • $ENV:WORKSPACE是Jenkins自动注入的环境变量,精准指向当前任务的工作区根目录,Git拉取的所有文件都在这里,不用手动找路径。
  • Join-Path拼接路径是PowerShell的规范写法,避免因路径分隔符(\)导致的错误。
  • -ToSession参数让Copy-Item直接从本地(Jenkins代理)复制文件到远程服务器,无需在远程机器上处理本地路径的问题。
  • 确保Jenkins代理机器能和目标Windows服务器正常通信,且你用的账号拥有远程服务器E:\install目录的读写权限。

如果遇到权限相关的问题,可以尝试在New-PSSession时添加-EnableNetworkAccess参数,或者确认远程账号的权限配置。

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

火山引擎 最新活动