2017-11-17 25 views
1

Jenkinsを使用してリモートスクリプトを実行する際に問題が発生しています。 PowerShellプラグインをインストールし、PowerShellスクリプトをローカルビルドサーバーで実行できますが、リモートサーバーで実行しようとすると常に失敗します。私はJenkinsの外で同じスクリプトをローカルでリモートで実行することができ、うまく動作します。私の仮定は、私が行方不明になっているセキュリティ設定がありますが、私の人生では、私はそれを見つけることができません。リモートPowershellスクリプトとJenkinsが動作しない

洞察力/助力があれば大いに感謝します。

以下のコードは、サーバー上ではなく、ジェンキンスを通じてPowerShellを使用して実行します:

$ErrorActionPreference = 'Stop' 

# Create a PSCredential Object using the "User" and "Password" parameters 
that you passed to the job 
$SecurePassword = 'xxxxxxx' | ConvertTo-SecureString -AsPlainText -Force 
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList 'ci-user', $SecurePassword 

# Invoke a command on the remote machine. 
# It depends on the type of job you are executing on the remote machine as 
to if you want to use "-ErrorAction Stop" on your Invoke-Command. 
Invoke-Command -ComputerName xxx.xx.xx.xxx -Credential $cred -ScriptBlock { 
    # Restart the W32Time service 
    Restart-Service -Name W32Time 
} 

以下のエラーが、私はジェンキンスでそれを実行したときに、私が得るものです。

Connecting to remote server xxx.xx.xx.xxx failed with the 
following error message : WinRM cannot process the request. The following 
error with errorcode 0x8009030d occurred while using Negotiate authentication: 
A specified logon session does not exist. It may already have been terminated. 

Possible causes are: 
    -The user name or password specified are invalid. 
    -Kerberos is used when no authentication method and no user name are 
specified. 
    -Kerberos accepts domain user names, but not local user names. 
    -The Service Principal Name (SPN) for the remote computer name and port does 
not exist. 
    -The client and remote computers are in different domains and there is no 
trust between the two domains. 
After checking for the above issues, try the following: 
    -Check the Event Viewer for events related to authentication. 
    -Change the authentication method; add the destination computer to the WinRM 
TrustedHosts configuration setting or use HTTPS transport. 
Note that computers in the TrustedHosts list might not be authenticated. 
    -For more information about WinRM configuration, run the following command: 
winrm help config. For more information, see the about_Remote_Troubleshooting 
Help topic. 
At C:\Windows\TEMP\jenkins3589460126620702793.ps1:12 char:1 
+ Invoke-Command -ComputerName xxx.xx.xx.xxx -Credential $cred -ScriptBlock { 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : OpenError: (xxx.xx.xx.xxx:String) [], PSRemoting 
    TransportException 
    + FullyQualifiedErrorId : 1312,PSSessionStateBroken 
+0

'Catch {$ error [0]}'でtry/catchブロックの中にコマンドを置くことはできますか?次に、エラーの出力を提供しますか?また、私はあなたがホスト名の代わりにIPアドレスを使用していることがわかります。[この質問](https://stackoverflow.com/questions/6587426/powershell-remoting-with-ip-address-as-target)へのDon Jonesの答えは、関連性がある。 – BenH

+0

Jenkins以外のPowerShellコマンドラインインターフェイスを使用してスクリプトを実行すると動作するリモート環境をセットアップするDon Jonesの回答を使用しました。問題は私がジェンキンスで実行したときです。私はエラーを投稿します... – pcroadkill

+0

'ci-user'はローカルまたはドメインアカウントですか? 'domain \ ci-user'や' servername \ ci-user'はどうなりますか? – BenH

答えて

0

これは、いくつかの異なる問題が原因で発生することができます:

  1. があなたのリモートマシンとマシンを接続している私はジェンキンスの外にそれを実行して動作しますときに、同じユーザー名とパスワードを使用しています同じドメインですか?そうでない場合は、ci-userのドメインを確認して、再試行してください。

    $ CRED =新オブジェクト可能System.Management.Automation.PSCredential -ArgumentList 'connectingserver/CI-ユーザー'、$ SecurePassword

  2. WinRMが、リモートサーバー上で使用可能になってWinRMサービスが実行されている、あります適切なリモーティングを許可するようにセットアップしますか? https://technet.microsoft.com/en-us/library/ff700227.aspx?f=255&MSPPError=-2147217396

  3. 同じ認証方法でリモートサーバーと接続サーバーをセットアップしていますか。 KerberosまたはCredSSPのどちらかを使用したいと思うでしょう。あなたがDouble-Hop issueを解決しようとしている場合にのみ、私はCredSSPを検討します。
0

私の方法のエラーが見つかりましたが、うまくいけば、この回答は、それに遭遇する他の人に役立つでしょう。

問題は、私が使用しているユーザーがローカルユーザーであり、ワークグループユーザーとして扱われる必要があることでした。したがって、ci-userの代わりに、\ ci-userとして渡す必要がありました。私がこれをしたら、それは魅力のように働く。

ありがとうございます。

関連する問題