`
hongzhguan
  • 浏览: 272773 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

分享到:
评论
2 楼 xyc717 2013-10-25  
xyc717 写道
请问我这个是什么情况?
cmd.exe : 2013-10-25 12:48:25 org.apache.catalina.startup.Catalina stopServer
所在位置 C:\Users\Administrator\Desktop\dailyBuild.ps1:123 字符: 5
+  cmd <<<<  /C shutdown.bat
    + CategoryInfo          : NotSpecified: (2013-10-25 12:4...lina stopServer:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

严重: Catalina.stop:
java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)

明白了,你这种情况时要在tomcat开启的情况下执行如果关闭的情况下在执行,肯定报这个错了
1 楼 xyc717 2013-10-25  
请问我这个是什么情况?
cmd.exe : 2013-10-25 12:48:25 org.apache.catalina.startup.Catalina stopServer
所在位置 C:\Users\Administrator\Desktop\dailyBuild.ps1:123 字符: 5
+  cmd <<<<  /C shutdown.bat
    + CategoryInfo          : NotSpecified: (2013-10-25 12:4...lina stopServer:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

严重: Catalina.stop:
java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)

相关推荐

    VS编译发布根据SVN自动更新版本号

    这些任务将在编译前或编译后执行,读取SVN版本信息,并将其插入到项目中的特定位置,如AssemblyInfo.cs文件。 4. **更新AssemblyInfo**:在C#项目中,`AssemblyInfo.cs`文件包含了程序集的元数据,包括版本信息。...

    Powershell(脚本) Ant(编译)实现一键打包

    3. **Powershell脚本实现**:接下来,设计一个Powershell脚本来循环遍历所有市场标识,调用Ant进行编译,并在每次编译前修改`AndroidManifest.xml`文件中的`UMENG_CHANNEL`元数据。此脚本应具备读取市场标识列表、...

    使用Powershell备份SVN存储库

    本篇文章将深入探讨如何利用Windows PowerShell来实现SVN存储库的自动化备份。 首先,了解PowerShell是一种强大的命令行工具,特别适用于系统管理和自动化任务。在Windows环境中,PowerShell提供了一种高效的方式...

    powershell实现域用户密码到期邮件提醒功能

    说明:服务器为windows server 2012 r2 std 中文版 此服务器只是DC,无其它功能。powershell实现域用户密码到期邮件提醒功能

    删除项目中的.svn文件

    一旦删除,将无法通过本地副本恢复这些信息,除非从远程仓库重新检出。 7. **版本控制替代方案**:随着Git的普及,许多开发者转向了分布式版本控制系统,Git的提交历史和分支管理功能更强大,但它并不会在工作目录...

    powershell脚本转exe文件

    在IT行业中,有时我们需要将PowerShell脚本转换为可执行(EXE)文件,以便于在没有PowerShell环境或者需要更安全分发的环境中运行。标题和描述中提到的"powershell脚本转exe文件"就是这个过程。下面将详细解释如何...

    VS2017 自动获取SVN版本控制号

    6. 确保保存这些更改,然后编译项目。现在,每次编译时,批处理文件会被执行,获取到的SVN版本号将被输出到控制台。 接下来,我们需要将获取到的版本号插入到代码中。一种常见的做法是在代码中定义一个全局变量,...

    C#实现SVN配置库服务器(Windows)异地实时镜像

    总的来说,实现SVN异地实时镜像系统是一个结合了版本控制技术、网络通信安全、任务调度和用户交互的综合性项目。通过C#编程,我们可以构建一个高效、安全的系统,确保开发团队能够无缝地进行远程协作和备份。

    SMO+PowerShell 实现SQLServer数据库的备份与还原

    标题 "SMO+PowerShell 实现SQLServer数据库的备份与还原" 涉及到的是在SQL Server环境中,使用SQL Server Management Objects (SMO) 和 PowerShell脚本来自动化数据库的备份和恢复过程。这是一种高效且灵活的方法,...

    删除SVN 批处理,清理SVN文件 ,删除SVN图标

    SVN在本地电脑上创建了一个工作副本,包含了从服务器上检出的所有文件和目录。这些文件通常带有`.svn`隐藏子目录,存储了元数据,如版本信息、冲突解决状态等。当你不再需要某个项目或想清理磁盘空间时,可能需要...

    PowerShell实现时间管理小秘书

    从自动记录电脑使用活动到分析时间分配,再到最后的报表生成,PowerShell都扮演了关键的角色。通过合理利用PowerShell的这些功能,我们可以更有效地管理自己的时间,从而提高工作效率和生活质量。对于那些希望实现更...

    exchange/powershell,Java调用powershell开通邮箱

    从标签"exchange powershell java socket"我们可以推断出更多细节: - **exchange**:主要涉及的是Exchange服务器的管理,特别是邮箱的创建和管理。 - **powershell**:意味着使用PowerShell脚本来执行具体的管理...

    批量删除.svn

    如果你之后还需要用到SVN,可能需要重新从服务器获取整个项目。 除了批处理脚本,还可以使用其他工具或编程语言实现批量删除,例如使用Python的`os`模块,或者通过图形界面工具如Total Commander的搜索与替换功能。...

    删除SVN创建的.svn文件夹的方法

    如果你想重新加入版本控制,需要重新检出项目。 最后,提供的`delete svn.reg`文件可能是一个注册表脚本,用于在Windows上添加或修改注册表项。这可能与删除`.svn`文件夹的操作有关,但具体用途需要查看文件内容...

    Python-PowerShell封装了PythonforNET实现从PowerShell调用Python

    标题中的“Python-PowerShell封装了Python for .NET实现从PowerShell调用Python”涉及到的是在Windows环境中,如何通过PowerShell脚本调用Python代码,这通常用于自动化任务或者集成不同语言的解决方案。这里的关键...

    在PowerShell中创建Winform窗体,给PowerShell脚本添加GUI界面 - 示例

    从印度小哥那里受到启发,PowerShell不止可以做批处理,自动化。还能做界面做GUI,也能实现很好的交互。因为PowerShell是可以和.Net 程序无缝集成的。所以.Net能用的东西在PowerShell里也几乎都能使用。那么如果想让...

    PowerShell实现UI自动化

    本主题将深入探讨如何利用PowerShell实现UI(用户界面)自动化。 在Windows操作系统中,UI自动化允许用户通过编程方式与图形用户界面进行交互,比如模拟点击按钮、填写表单或执行其他操作,这在批量处理或无人值守...

Global site tag (gtag.js) - Google Analytics