0

Jenkins サーバーを構築しています。展開手順の 1 つは、運用サーバーでコマンドを実行して、UAT テスト済みのアーティファクトを必要なフォルダーにダウンロードすることです。Jenkins は CentOS Linux で実行され、運用サーバーは Windows 2008 R2 を実行しています。

ただし、クライアントは本番サーバーにソフトウェアをインストールしたくないため、SSH 経由でコマンドを実行することはできません。クライアントは、以前に Telnet を使用して不快な経験をしました。これは安全でないサービスであり、サーバー上で既に無効になっています。

SSH と Telnet を使用する以外に、リモート マシンでコマンドを実行する方法はありますか? 特定のイベントによってトリガーされるタスクを作成することを考えていましたが、サーバーでリモートでイベントを発生させる方法は簡単な仕事ではないようです。

4

1 に答える 1

1

4 つの異なる解決策を考えることができます。

  1. Jenkins サーバーがトリガー ファイルを配置できるネットワーク共有を実稼働マシンに用意します。そのファイルをチェックしてダウンロードをトリガーするスケジュールされたタスクを用意します。

  2. 本番マシンでスケジュールされたタスクが Jenkins サーバーに新しいファイルをポーリングするようにします。Powershell を使用して、Jenkins REST API にクエリを実行できます。

  3. 運用マシンに IIS がある場合は、Jenkins に asp.net スクリプトをトリガーさせるか、cgi スクリプトに対してフォーム POST を実行させるか、トリガー ファイルをアップロードさせます。CentOS の curl と wget が役立ちます。

  4. 最後の手段として、別の Windows マシンをミックスに追加します。その上に SSH をインストールします。Jenkins から新しいマシンに SSH を使用してから、新しいマシンから運用マシンに powershell を使用します。

ステップ 4 に決定した場合は、Power Shell を使用してリモート マシンでコマンドを実行します。

Windows 2008 R2 には、デフォルトで PS2.0 がインストールされています。

これが私がそれを行う方法の例です。

$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 に答える