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
'Catch {$ error [0]}'でtry/catchブロックの中にコマンドを置くことはできますか?次に、エラーの出力を提供しますか?また、私はあなたがホスト名の代わりにIPアドレスを使用していることがわかります。[この質問](https://stackoverflow.com/questions/6587426/powershell-remoting-with-ip-address-as-target)へのDon Jonesの答えは、関連性がある。 – BenH
Jenkins以外のPowerShellコマンドラインインターフェイスを使用してスクリプトを実行すると動作するリモート環境をセットアップするDon Jonesの回答を使用しました。問題は私がジェンキンスで実行したときです。私はエラーを投稿します... – pcroadkill
'ci-user'はローカルまたはドメインアカウントですか? 'domain \ ci-user'や' servername \ ci-user'はどうなりますか? – BenH