Невозможно загрузить zip-архив на лазурном сервере с помощью PowerShell через Jenkins

Я пытаюсь автоматически развернуть сборку на лазурном сервере. Для этого я использую сценарий PowerShell для загрузки zip-архива на лазурном сервере. Сценарий состоит из двух частей: первая - для очистки папки wwwroot, а вторая - для загрузки zip-архива в wwwroot. Он успешно работает, когда я запускаю скрипт через Powershell exe, но выдает ошибку при запуске через Jenkins. Странно, но он успешно запускает первую часть, но дает ошибку во второй части. Скрипт Powershell:

$username = "`$347testpass"
$password = "xyz"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"

#Clean wwwroot folder
$apiUrl1 = "https://347testpass.scm.azurewebsites.net/api/command"
$commandBody = @{
    command = "rmdir D:\home\site\wwwroot /Q /S"
  }
Invoke-RestMethod -Uri $apiUrl1 -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST ` -ContentType "application/json" -Body (ConvertTo-Json $commandBody) | Out-Null

#Upload zip file
$apiUrl = "https://347testpass.scm.azurewebsites.net/api/zip/site/wwwroot/"
$filePath = "D:\AzureWeb\Upload\qwerty.zip"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method PUT -InFile $filePath -ContentType "multipart/form-data"

Отображение ошибки в консоли Jenkins:

Invoke-RestMethod : The request was aborted: The request was canceled.
At C:\Users\Harsh.Sharma\AppData\Local\Temp\hudson8158442147919891501.ps1:34 
char:1
+ Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f 
$base64A ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
    + CategoryInfo          : NotSpecified: (:) [Invoke-RestMethod], WebExcept 
   ion
    + FullyQualifiedErrorId : System.Net.WebException,Microsoft.PowerShell.Com 
   mands.InvokeRestMethodCommand

person rAJ    schedule 11.04.2018    source источник


Ответы (2)


Наконец, он работает после добавления пары вещей, таких как тайм-аут, изменение типа метода, протокол безопасности tls12.

$apiUrl = "https://347testpass.scm.azurewebsites.net/api/zipdeploy"
$filePath = "C:\BuildDeploymentAzureEnterprise3.4\Unzipped\AzureBuildFiles.zip"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod -Uri $apiUrl -DisableKeepAlive -TimeoutSec 1000 -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath -ContentType "multipart/form-data"
person rAJ    schedule 12.04.2018

Попробуйте использовать -DisableKeepAlive с Invoke-RestMethod.

person Asator    schedule 11.04.2018
comment
Я использую это, но безуспешно. Invoke-RestMethod -Uri $ apiUrl -DisableKeepAlive -Headers @ {Authorization = (Basic {0} -f $ base64AuthInfo)} -UserAgent $ userAgent -Method PUT -InFile $ filePath -ContentType multipart / form-data - person rAJ; 12.04.2018