Azure Devops (オンプレミス) サーバーで "Powershell on Remote Machine" タスクを実行すると、実行中に 30 秒の一時停止が一貫して発生します。
これにより、非常に単純なリモート リモート スクリプトの呼び出しでさえ、完了するまでに少なくとも 30 秒かかります。
タスクを通常の PowerShell タスクに変更し、PSSession を手動でセットアップして、まったく同じ Invoke-Command を発行すると、はるかに高速に実行されます。
質問は、これは Azure Devops サーバーのバグですか、それともリモート マシン タスクで Powershell のパフォーマンスを向上させるために行う必要がある追加の構成がありますか? 何も調整しようとはしていません。デフォルトのタスク構成を使用しただけです。
Azure Devops サーバーのバージョンは 2019 Update 1 です。エージェントは最新バージョンに更新されています。
"Powershell on remote machine" Azure Devops タスクからの出力:
2019-10-10T04:51:03.4296728Z ##[section]Starting: <hidden> - Stop site
2019-10-10T04:51:03.4727773Z ==============================================================================
2019-10-10T04:51:03.4728808Z Task : PowerShell on target machines
2019-10-10T04:51:03.4728850Z Description : Execute PowerShell scripts on remote machines using PSSession and Invoke-Command for remoting
2019-10-10T04:51:03.4728886Z Version : 3.1.2
2019-10-10T04:51:03.4728935Z Author : Microsoft Corporation
2019-10-10T04:51:03.4728970Z Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/powershell-on-target-machines
2019-10-10T04:51:03.4729006Z ==============================================================================
2019-10-10T04:51:08.6710628Z PSSession created for Machines:'<hidden>'
2019-10-10T04:51:08.9207041Z ================================================ <hidden> ================================================
2019-10-10T04:51:38.9317626Z ================================================ <hidden> ================================================
2019-10-10T04:51:38.9325165Z ##[command]& 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'C:\Users\<hidden>\AppData\Local\Temp\f228e8e1-f90a-4263-89cd-55320f5ad80b.ps1'"
2019-10-10T04:51:38.9630832Z
2019-10-10T04:51:39.0526046Z Script execution succeeded for ComputerName: '<hidden>'
2019-10-10T04:51:39.3236823Z ##[section]Finishing: <hidden> - Stop site
2019-10-10T04:51:08.9207041Z から 2019-10-10T04:51:38.9317626Z までの 30 秒間の一時停止を OBS します。マシン タスクをターゲットにするために、すべての Powershell でこの種の一時停止が見られます。
通常の Powershell タスクに変更し、PSSession を手動で設定すると、スクリプトの実行速度が大幅に向上します。次のように実装します。
$password = ConvertTo-SecureString "$(PASSWORD)" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("$(USER)", $password)
$session = New-PSSession -ComputerName $(SERVER) -Credential $cred -UseSSL
Invoke-Command -Session $session -ScriptBlock { `
Copy-Item "C:\Users\<HIDDEN>\Documents\app_offline.htm" `
"$(DEPLOY_PATH)\app_offline.htm" `
}