0

我正在构建一个 Jenkins 服务器。部署步骤之一是在生产服务器上执行命令以将 UAT 测试的工件下载到所需的文件夹。Jenkins 在 CentOS Linux 上运行,而生产服务器运行 Windows 2008 R2。

但是,我的客户不想在生产服务器中安装任何软件,因此无法通过 SSH 执行命令。客户之前在使用 Telnet 时有过不愉快的经历。这是一项不安全的服务,已在服务器上禁用。

除了使用 SSH 和 Telnet,还有其他方法可以在远程机器上执行命令吗?我正在考虑创建一个由特定事件触发的任务,但是如何远程在服务器上引发事件似乎不是一件容易的事。

4

1 回答 1

1

我可以想到四种不同的解决方案:

  1. 在生产机器上拥有一个网络共享,您的 Jenkins 服务器可以将触发器文件放入其中。有一个检查该文件并触发下载的计划任务。

  2. 让生产机器上的计划任务轮询 Jenkins 服务器以获取新文件。Powershell 可用于查询 Jenkins REST api。

  3. 如果生产机器有 IIS,让 Jenkins 触发一个 asp.net 脚本,做一个表单 POST 到一个 cgi 脚本,或者上传一个触发文件。CentOS 上的 curl 和 wget 将对此有所帮助。

  4. 作为最后的手段,将另一台 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
}
于 2013-05-01T03:03:25.073 回答