注意應用程序服務器授權的處理:
1. 啓動WinRM(Windows Remote Management (WS-Management))服務
2. 將Jenkins客戶端加入到信任列表
Command: Set-Item wsman:\localhost\Client\TrustedHosts -value 192.168.1.xxx
3. 設置 WinRM 以接收請求
Command: Enable-PSRemoting -Force
Powershell完整命令:
注:如果iis應用程序池沒有啓動的情況下執行會出現錯誤提示:服務尚未啓動。 (異常來自 HRESULT:0x80070426)
$username='admin' $password='xxx' $hostname='192.168.1.xxx' $localdir='C:\Jenkins\workspace\ProjectName\aspnet-core\src\Project\bin\Debug\netcoreapp2.2\publish' #本地發佈程序目錄 $remotedir='D:\wwwroot\Project_API' #服務器IIS站點工作目錄 $eap = $ErrorActionPreference Try{ $ErrorActionPreference = 'Stop' #創建遠程PSSesion會話 $pass=ConvertTo-SecureString -String $password -AsPlainText -Force $cre=New-Object pscredential($username, $pass) $session=New-PSSession -ComputerName $hostname -Credential $cre Invoke-Command -Session $session -ScriptBlock{ $nowTime=Get-Date #當前時間 $sitename='Project_API' #站點名稱 $workdir='D:\wwwroot\Project_API' #工作目錄 $backdir='D:\wwwroot\Back' #備份目錄 $iissitespath='IIS:\Sites\'+$sitename $iisapppoolspath='IIS:\AppPools\'+$sitename import-module webadministration set-location IIS:\ #停止IIS站點 $site=Get-Item $iissitespath $site.Stop() #停止IIS程序池 $pool=Get-Item $iisapppoolspath #這行執行有點問題 $pool.Stop() #ZIP備份文件 $backpath='{0}\{1}_{2}.{3}' -f $backdir, $sitename, $nowTime.ToString("yyyyMMddHHmmss"), 'zip' Compress-Archive -Path $workdir -DestinationPath $backpath #刪除IIS站點工作目錄下所有文件,排除(*.jpg,*.jpeg,*.png,*.gif,*.log) 文件格式 $removeworkpath=$workdir+'\*' Remove-Item $removeworkpath -exclude *.jpg,*.jpeg,*.png,*.gif,*.log -recurse } #將本地文件 上傳至 服務器 ls $localdir | cp -Destination $remotedir -ToSession $session -Recurse -Force Invoke-Command -Session $session -ScriptBlock{ #啓動IIS站點 $site.Start() #啓動IIS站點 $pool.Start() #這行執行有點問題 } #使用完畢後一定記得釋放PSSesion Remove-PSSession -Id $session.Id } Catch{ # 包含堆棧的信息 Write-Output $PSItem Exit 1 } Finally{ $ErrorActionPreference = $eap }