`
- 浏览:
270221 次
- 性别:
- 来自:
深圳
-
PowerShell实现从SVN检出JavaWeb项目并编译
用powershell实现从svn服务器检出javaweb项目并自动编译和部署到tomcat,编译结果通过邮件发送相应开发人员
构建脚本:
#dailyBuild.ps1
#初始化配置
Write-Host "正在进行初始化配置……"
#每日构建工作目录配置
$buildHome = "F:\dailyBuild"
#SVN相关配置
$svnHome = "C:\Program
Files\VisualSVN Server\bin"
$svnUserName = "tianwei"
$svnPsw =
"tianwei"
#tomcat相关配置
$tomcatHome = "F:\tomcat-6.0.20"
#邮件相关配置
$smtpServer = "EX2K7.tfsp.cn"
$smtpUser =
"tianwei@tianfusoftwarepark.com"
$smtpPassword =
"tfsptianwei"
#收件人地址
$MailToAddress = @()
$MailToAddress +=
"tianwei@tianfusoftwarepark.com"
$MailToAddress +=
"hetao@tianfusoftwarepark.com"
#邮件内容
$MailContent =
"`r`n"
#邮件附件
$AttachFiles =
@()
#项目相关配置@{项目名=svn路径;
#项目名=svn路径}
$projectList =
@{"OSPMS"="http://192.168.1.221:88/svn/Component_Libraries/OSPMS/12_Source
Code/trunk/OSPMS"}
#从SVN服务器检出项目
function checkOut
([string]$projectName,[string]$projectUrl)
{
Write-Host
"正在从svn服务器检出项目:$projectName ……"
Set-Location -path $svnHome
$projectHome =
$buildHome+"\"+$projectName
./svn.exe export $projectUrl $projectHome -q
--force --username $svnUserName --password $svnPsw
}
#编译项目
function compileProject ([string]$projectName)
{
Write-Host
"正在编译项目:$projectName ……"
#配置编译需要的相关参数
$projectHome =
$buildHome+"\"+$projectName
$sourcePath =
$projectHome+"\WEB-INF\src"
$targetPath =
$projectHome+"\WEB-INF\classes"
$projectLibPath =
$projectHome+"\WEB-INF\lib"
#编译项目,拷贝源代码到项目classes目录
Copy-Item
$sourcePath\* $targetPath -recurse
#构造classPath
$CLASSPATH =
"%CLASSPATH%;"+$targetPath
$libList = Get-ChildItem -path $projectLibPath
-include *.jar -Recurse
Foreach($file in $libList)
{
$CLASSPATH =
$CLASSPATH + ";"+$file
}
$otherLibList = Get-ChildItem -path
$tomcatHome\lib -include *.jar -Recurse
Foreach($file in
$otherLibList)
{
$CLASSPATH = $CLASSPATH +
";"+$file
}
#遍历文件夹,获得需要编译的文件列表
$fileList = Get-ChildItem -path
$targetPath -include *.java -Recurse
#开始编译
Foreach($file in
$fileList)
{
javac -classpath $CLASSPATH $file -encoding utf-8
-g:{source,lines} -Xlint:unchecked -Xstdout $buildHome\tmp.txt
$pro =
Get-ItemProperty -path $buildHome\tmp.txt
if($pro.Length -gt
0)
{
Get-Content -Path $buildHome\tmp.txt | add-content -path
$buildHome\$projectName.txt
add-content -path $buildHome\$projectName.txt
-value
"==============================================================="
}
}
}
#部署项目
function deployProject ([string]$projectName)
{
Write-Host
"正在部署项目:$projectName ……"
Remove-Item -path
$tomcatHome\work\Catalina\localhost\$projectName -recurse -force
Remove-Item
-path $tomcatHome\webapps\$projectName -recurse -force
Remove-Item -path
$tomcatHome\webapps\$projectName.war -recurse -force
$projectHome =
$buildHome+"\"+$projectName
Set-Location $projectHome
jar cf
$buildHome\$projectName.war *
Copy-Item $buildHome\$projectName.war
$tomcatHome\webapps -recurse
}
#发送邮件
function
sendMail
{
Write-Host "正在发送编译结果给相关人员 ……"
#创建 mail message
$mail =
New-Object System.Net.Mail.MailMessage
#设置 addresses
$mail.From =
New-Object System.Net.Mail.MailAddress($smtpUser)
Foreach ($element in
$MailtoAddress)
{
$mail.To.Add($element)
}
#设置邮件内容
$date =
Get-Date
$mail.Subject = "$date 构建结果";
$mail.Priority =
"High"
$MailContent = $MailContent + "详情请查看附件。"
$mail.Body =
$MailContent
Foreach ($element in $AttachFiles)
{
$attachment =
new-Object
System.Net.Mail.Attachment($element)
$mail.Attachments.Add($attachment)
}
#发送邮件
$smtp = New-Object System.Net.Mail.SmtpClient -argumentList
$smtpServer
$smtp.Credentials = New-Object System.Net.NetworkCredential
-argumentList $smtpUser,$smtpPassword
$smtp.Send($mail)
}
#构建
function doBuild
{
Write-Host "清理构建现场……"
#清理编译现场
Remove-Item
-path $buildHome\* -recurse -force
#停止tomcat
Write-Host
"停止tomcat……"
Set-Location $tomcatHome\bin
cmd /C shutdown.bat
#开始构建
Write-Host "开始构建……"
foreach($key in
$projectList.Keys)
{
#从svn检出项目
checkOut $key
$projectList[$key]
#编译项目
compileProject $key
#判断编译是否通过
if(Get-Content -Path $buildHome\$key.txt | select-string -pattern "错误"
-Quiet)
{
Write-Host "$key 编译未通过!"
$MailContent = $MailContent + $key +
":编译未通过!`r`n`n"
}
else
{
Write-Host "$key 编译通过!"
$MailContent =
$MailContent + $key + ":编译通过!`r`n`n"
deployProject $key
}
$AttachFiles
+= $buildHome+"\"+$key+".txt"
}
Write-Host
"构建结束……"
#发送邮件
sendMail
Write-Host "启动tomcat"
#启动tomcat
Set-Location $tomcatHome\bin
cmd /C
startup.bat
}
#执行构建
doBuild
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Powershell(脚本) Ant(编译)实现一键打包
众所周知,大部分通过命令行编译VC项目的过程都需要先初始化VC的工作环境(用cmake构建的除外),通常是通过开始菜单中的 “x64 Native Tools Command Prompt for VS 2019” 或 “x86 Native Tools Command Prompt ...
说明:服务器为windows server 2012 r2 std 中文版 此服务器只是DC,无其它功能。powershell实现域用户密码到期邮件提醒功能
powershell脚本转exe文件powershell脚本转exe文件powershell脚本转exe文件powershell脚本转exe文件
如何使用Powershell自动备份Subversion存储库
从印度小哥那里受到启发,PowerShell不止可以做批处理,自动化。还能做界面做GUI,也能实现很好的交互。因为PowerShell是可以和.Net 程序无缝集成的。所以.Net能用的东西在PowerShell里也几乎都能使用。那么如果想让...
PowerShell重启服务(Restart-Service),使用PowerShell可以很方便的操作Windows系统服务,比如实现自动重启服务。本文就介绍如何使用PowerShell来重启服务,以及一些相关的内容。PowerShell中重启服务的cmdlet是...
PowerShell封装了Python for .NET实现从PowerShell调用Python
适合学习PowerShell的资料,详细介绍了PowerShell的使用方法!
java 调用 powershell 并传参 返回
powershell4.0完整升级包(windows powershell升级补丁系统4.0版本) windows08R2 powershell升级到4.0的完整升级包,包含所有需要的依赖包。 注意:只适用于08R2系统; 另外:powershell4.0功能强大 可以批量添加AD域...
NULL 博文链接:https://soft-development.iteye.com/blog/1047670
微软希望所有平台处于同一个PowerShell版本中,从而实现更好的跨平台兼容性。此外微软还对PowerShell的支持生命周期进行了更改。微软宣布将紧随.NET Core支持周期,将发布LTS(长期服务)和非LTS版本的PowerShell 7...
但是,我们也可以清楚地看到,由于PowerShell在Windows平台上普及,我们的Windows使用量并没有显著增长,这令人惊讶...... 这意味着Windows PowerShell和PowerShell Core用户将能够在Windows、Linux和macOS上跨越...
主要介绍了Powershell实现从注册表获取本地关联文件的扩展名,本文直接给出实现代码,需要的朋友可以参考下
PowerShell 7相比 PowerShell 5有较大程度的改进。附上最新版的安装包,因为直接从Github下是很慢的。百度的离线下载也不能用。放在这里以备不时之需。方便大家。
很好的powershell资源,循序渐进,写的很好。
微软希望所有平台处于同一个PowerShell版本中,从而实现更好的跨平台兼容性。此外微软还对PowerShell的支持生命周期进行了更改。执行msi安装后如果需要替换win+a中的powershell,只需要拷贝安装目录至%windir%\...