jenkins构建.net 自动服务 项目到iis(windows服务版本)

  • 其它
[string[]]$computername="172.25.63.37"

$account = "hcadmin"
$password = $env:testpasswd
$sn = $env:ServiceNAME
$pn = $env:ProcessNAME
If ($sn -eq $null) {
echo "未定义目录名"
exit
}
Else
{
echo "项目名为$sn"
}
$tmppath = "D:\jenkins-tmp\$sn\"
$runpath = "D:\web\background\"
# 把密码转换为SecureString
$secpwd = convertto-securestring $password -asplaintext -force
# 新建PSCredential对象
$cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd -ErrorAction Stop
# 远程主机列表赋值给变量

foreach ($cname in $computername)
{
# 创建PSSession
$session_many = new-pssession -ErrorAction Stop -computername $cname -Credential $cred
# 批量远程执行命令

echo "重置缓存临时目录"
Invoke-Command -Session $session_many -ArgumentList $tmppath -ScriptBlock { 
param($tmppath)
rd  -recurse $tmppath
md $tmppath
}
echo "重置缓存临时目录完成"
echo "开始同步程序文件"
Copy-Item -Path ${env:WORKSPACE}\${env:DEST}\jenkins_publish\* -Destination $tmppath -ToSession $session_many -recurse -ErrorAction Stop
echo "同步程序文件完成"
echo "停止服务"

Invoke-Command -Session $session_many -ArgumentList $pn -ScriptBlock { 
param($pn)
$pc = Get-Process -Name $pn

If ($pc -eq $null) {
echo "未发现程序名为${pn}的进程"
}
Else
{
taskkill /f /pid  $pc.Id /t
}
}
echo "停止服务完成"


echo "开始替换远程程序文件"
Invoke-Command -Session $session_many -ArgumentList $tmppath, $runpath -ScriptBlock { 
param($tmppath, $runpath)
#rd -recurse $runpath
#md $runpath
}
Invoke-Command -Session $session_many -ArgumentList $tmppath, $runpath -ErrorAction Stop -ScriptBlock { 
param($tmppath, $runpath)
Copy-Item -ErrorAction Stop -recurse -Force $tmppath\* -Exclude XmlConfig $runpath
}
echo "替换远程程序文件完成"
echo "启动服务"
Invoke-Command -Session $session_many -ArgumentList $sn -ErrorAction Stop -ScriptBlock { 
param($sn)
Start-Service -Name $sn
}
echo "启动服务成功"
}