目标:從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文檔時使用查找替換。
實作代碼:
#定義生成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/honghe" "E:\Java\Jenkins\jobs\Eagle_V2.0\workspace"
說明: 1. 該腳本使用者jenkins自動執行,前置操作是jenkins使用Svn更新了指定目錄中的檔案,後繼操作是發送生成的檔案給指定的人。 2. 如果 svn目錄配置在系統path路徑中,則可以不使用全路徑。