序言

因为需要在Windows上编译和部署程序,因此需要借助PowerShell的脚本力量完成这些事情。

目标服务器是windows server2022,因此不需要初始化WinRM服务,省却了不少的麻烦,让我们可以直接通过Powershell远程服务器,执行命令。

1. 开启远程会话

使用过SSH的都知道,在linux下这个命令极其强大,基本可以做任何事情,当然windows页支持ssh,只不过由于缺少相关命令,还不如直接使用powershell来得直接。

闲话少叙,让我们看看怎么使用PowerShell来远程主机。

Enter-Pssession 192.168.4.189 -Credential administrator

jenkins SSH Exec command 脚本编写 jenkins配置shell脚本_运维


输入密码,就可以访问远程计算机了。

当然,由于Jenkins无法交互,因此,这里,需要转变下密码,作为密钥参数输入才行。

$pass=ConvertTo-SecureString -String'your password'-AsPlainText -Force
$cre=New-Object pscredential('your username', $pass)
$session=New-PSSession -ComputerName $server -Credential $cre

然后利用 Invoke-Command 就可以远程执行命令了。

2. 信任错误

如果执行 New-PSSession出现错误:如果身份验证方案与 Kerberos 不同,或者客户端计算机未加入到域中, 则必须使用 HTTPS 传输或者必须将目标计算机添加到 TrustedHosts 配置设置。使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts列表中的计算机可能未经过身份验证。通过运行以下命令可获得有关此内容的更多信息: winrm
help config。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。

那么,这说明你需要在执行计算机的信任列表内增加服务器Ip地址。

一般操作步骤如下:

#1. 切到管理的client目录下
cd WSMan::localhost\client
#2. 查看子项,其中TrustedHosts会列出本机已添加的可信主机IP
Get-ChildItem
#3. 将被控服务器IP添加为可信主机
Set-Item ./TrustedHosts 192.168.4.189
#4. 再次获取子项时
Get-ChildItem ./TrustedHosts
#5. 将所有主机添加为可信主机*
Set-Item ./TrustedHosts *

一番精打细算,你应该可以获取到session了,session在手,江山我有!

3. Jenkins 调用

# ===设定登录===
$pass=ConvertTo-SecureString -String $ENV:devpassword -AsPlainText -Force
$cre=New-Object pscredential($ENV:ServerUser, $pass)
$session=New-PSSession -ComputerName $ENV:TestServer -Credential $cre

# === 登录===
  if($session){
    Write-Output "连接到系统开发环境..."
    try{    
    	Copy-Item "$ENV:WORKSPACE/$package" -Destination $dest -ToSession $session -Recurse -Force
    	Invoke-Command -Session $session -ScriptBlock{ param($p1, $p2, $p3)
          if(!(Test-Path $p3)){ 
           		mkdir $p3
           }
          ChDir $p1     
          Expand-Archive "$p2" -DestinationPath "$p3" -Force
          Copy-Item -Path "$p3/dist/*" -Destination "$p3" -Recurse -Force
          Remove-Item "$p3/dist" -Recurse -Force
    	} -ArgumentList $dest, $package,$deploy   
      Write-Output "发布程序到系统开发环境..."
      
    }
    finally{     
      Remove-PSSession -Id $session.Id 
    }
  }
  else{
    # throw "This is an error."
    Write-Error "不能连接系统开发环境..."
  }

jenkins SSH Exec command 脚本编写 jenkins配置shell脚本_开发环境_02