我可以想到四种不同的解决方案:
在生产机器上拥有一个网络共享,您的 Jenkins 服务器可以将触发器文件放入其中。有一个检查该文件并触发下载的计划任务。
让生产机器上的计划任务轮询 Jenkins 服务器以获取新文件。Powershell 可用于查询 Jenkins REST api。
如果生产机器有 IIS,让 Jenkins 触发一个 asp.net 脚本,做一个表单 POST 到一个 cgi 脚本,或者上传一个触发文件。CentOS 上的 curl 和 wget 将对此有所帮助。
作为最后的手段,将另一台 Windows 机器添加到组合中。在上面安装 SSH。使用 SSH 从 Jenkins 连接到新机器,然后使用 powershell 从新机器连接到生产机器。
如果您决定执行第 4 步,我将使用 Power Shell 在远程计算机上运行命令。
PS2.0 默认安装在 Windows 2008 R2 上。
这是我如何做的一个例子。
$username = 'user'
$password = 'password'
$appHost = 'hostname'
$dest = 'C:\Unpack\'
$archive = "C:\Releases\new release.7z"
$securePass = ConvertTo-SecureString -AsPlainText $password -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,$securePass
"Create PowerShell Session"
$appSession = New-PSSession -ComputerName $appHost -Credential $cred -Authentication CredSSP
invoke-command -session $appSession -scriptblock { param($dest,$archive) & 'C:\Program Files (x86)\7-Zip\7z.exe' x -bd -aoa """-oc:\$dest""" """c:\$dest\$archive"""} -args $dest,$archive
$remotelastexitcode = invoke-command -session $appSession -ScriptBlock { $lastexitcode }
if ( $remotelastexitcode -ne 0 )
{
"Archive Extraction Failed. Is a file locked or open?"
exit -1
}