您的位置:首页 > 运维架构 > Shell

jenkins中配置powershell生成svn日志(word)

2015-08-28 10:59 686 查看

目标:从svn中得到日志,按给定的格式生成Word文件。
word文件格式如下:

每日构建更新记录

标记说明:

+ 新功能全部完成。

# 新功能部分完成。

@ 功能完善(原来已经完成的功能,再次完善)。

* 修正bug(需要在“每日构建日志”中体现的BUG)。

!不能从页面体现的内容。

2013-03-14 Eagle_V2.0 SVN版本号:2254

一 界面可查看内容

1. [+]生成拆线图

2. [+]查询条件设置完成

二 其他内容

1. [@]告警信息信息调整

2. [!] 扩展ExtJS的Combobox

3. [!] 修改ODS图标

4. [!]去掉公式编辑器的验证

5. [!]去除新增‘图表’‘混排’类型的报表时同时增加的报警查询条件

6. [@]告警控件编写

7. [*]修改BUG:Compo00006126 列表-表内链接:选择外部链接后,录入链接地址时页面显示有问题 已修正

其中红色的部分是要从svn日志中提取,其他部分为固定内容。
为了实现这个功能,我选择了使用powershell脚本。
分析:
要生成这个文件就是要把这个文件中红色的部分替换成实际的内容,包括4个部分:
1. 当前日期;
2. svn版本号;
3. 日志中[+]开头的注释;
4. 日志中全部的注释;

准备:
为了实现这个功能,把上面文档中的内容分别定义为:

%date%,%version%,%display%和%all%,在生成word文档时使用查找替换。

实现代码:
<strong>#定义生成word的函数
function buildWord([string]$svnUrl,[string]$projectPath)
{
#定义后面会用到的目录、文件等常量
$workspace = "E:\Java\Jenkins\jobs\Email\workspace"
$logFile = "E:\Java\Jenkins\jobs\Email\workspace\eagle2.log"
$wordFile = "$workspace\Eagle_V2.doc"

$lastdate =  (get-date).toString("yyyy-MM-dd")
$nextDay = (get-date).addDays(1).toString("yyyy-MM-dd")
#执行svn得到当天提交的日志
cmd /C "E:\Java\Subversion\bin\svn log $svnUrl -r{$lastdate}:{$nextDay} --username lichenglin --password 123 >""$logFile"""
#复制模板文件为要生成的文件
cmd /C "copy /Y $workspace\Eagle_V2_2.doc $wordFile"

# word操作要使用的变量
$ReplaceAll = 2
$FindContinue = 1

$MatchCase = $False
$MatchWholeWord = $True
$MatchWildcards = $False
$MatchSoundsLike = $False
$MatchAllWordForms = $False
$Forward = $True
$Wrap = $FindContinue
$Format = $False
#打开word
$wordApp = New-Object -COM Word.Application
$wordApp.Visible = $False
#$file = (dir $wordFile).FullName
$doc = $wordApp.Documents.Open($wordFile)
$Selection = $wordApp.Selection

#日期
$FindText = "%date%"
$replaceText = get-date -format yyyy-MM-dd
$Selection.Find.Execute(
$FindText,
$MatchCase,
$MatchWholeWord ,
$MatchWildcards,
$MatchSoundsLike,
$MatchAllWordForms,
$Forward,
$FindContinue,
$Wrap,
$replaceText,
$ReplaceAll
)

#版本
$FindText = "%version%"
#使用svnversion得到给定目录或文件的svn版本号
$replaceText = E:\Java\Subversion\bin\svnversion $projectPath
$Selection.Find.Execute(
$FindText,
$MatchCase,
$MatchWholeWord ,
$MatchWildcards,
$MatchSoundsLike,
$MatchAllWordForms,
$Forward,
$FindContinue,
$Wrap,
$replaceText,
$ReplaceAll
)
$Range = ""
$ConfirmConversions= $False
$Link = $False
$Attachment = $False

#显示的内容
$FindText = "%display%"
#从日志文件中取[+]开始的行,并加上行号后,保存到mylog1.log文件中
cat $logFile | select-string -pattern \[\+\] |foreach-object -process {($num++).tostring() + ".  " + $_}> $workspace\mylog1.log;
#选中"%display%"
$Selection.Find.Execute(
$FindText,
$MatchCase,
$MatchWholeWord ,
$MatchWildcards,
$MatchSoundsLike,
$MatchAllWordForms,
$Forward
)
#用文件中的内容替换选中的内容
$Selection.InsertFile("""$workspace\mylog1.log""", $Range, $ConfirmConversions, $Link, $Attachment)

#所有svn日志
$FindText = "%all%"
cat $logFile | select-string -pattern \[.\]  |foreach-object -process {($num++).tostring() + ".  " + $_}> $workspace\mylog2.log;
#clip|$replaceText
#$replaceText
$Selection.Find.Execute(
$FindText,
$MatchCase,
$MatchWholeWord ,
$MatchWildcards,
$MatchSoundsLike,
$MatchAllWordForms,
$Forward
)
$Selection.InsertFile("""$workspace\mylog2.log""", $Range, $ConfirmConversions, $Link, $Attachment)

#关闭word
$doc.close()
$wordApp.Quit()
}
#调用函数生成word文档
buildWord "http://192.168.0.123:8088/svn/honghe_V2/04Code/v2.0/<span style="font-family: Tahoma; text-align: -webkit-auto;">honghe</span><span style="text-align: -webkit-auto; font-family: Tahoma;">" "E:\Java\Jenkins\jobs\Eagle_V2.0\workspace"</span></strong>


说明:
1. 该脚本用户jenkins自动执行,前置操作是jenkins使用Svn更新了指定目录中的文件,后继操作是发送生成的文件给指定的人。
2. 如果 svn目录配置在系统path路径中,则可以不使用全路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: