jenkins中使用tfs插件做增量的版本發布部署


一 配置介紹

使用jenkins的tfs插件進行,源碼的下載,編譯,打包的操作,然后使用windows的批處理命令,在局域網內(或者本機)把打包的release包,刪除掉web.config,然后靠配到iis指向的磁盤位置,如此實現自動發布。在此種情況下,因為源碼經過演進項目擴大,存在越來越多的文件,包也越來越大,往往進行了簡單的修改,但是發布需要持續幾分鍾甚至更長,而人工發布就只需簡單幾秒鍾拷貝,這樣使自動化發布的效果大打折扣。為此做出一些改進的思路。

二 改進思路

  1. 刪除copy配置,觀察在拉取代碼,編譯,打包時間的花費。
  2. 使用ftp替代copy命令,觀察世間是否有提高。
  3. 修改其中一個.cs類文件,觀察對應的dll是否修改日期變化,其它的dll文件並無變化。
  4. 修改其中一個.cshtml view層文件,觀察在打包程序中文件修改時間是否發生變化,同樣其它文件的修改時間保持不變。
  5. 如果生成的release包,是針對修改文件的時間只發生變化的,就考慮提取相比上次構建時間發生變化的文件,只覆蓋此類文件到iis只想磁盤位置。

三 測試進行

  1. 沒有文件xcopy,整體在幾秒左右時間。
  2. 使用ftp拷貝,文件名不能存在中文(之前有查是jenkins版本問題,升級之后依然存在),同時時間上還是不盡人意。
  3. 目前Enterprise.dll文件修改時間 ‎2016‎年‎6‎月‎13‎日,‏‎14:18:19,進行web項目,.cs文件修改,此dll release修改日期發生變化。
  4. 目前 D:\jenkins1.65\workspace\CI_KKEnterprise(企業端)\EnterpriseCenterPublish\Areas\RZTJ\Views\RZTJ\Index.cshtml(release包)文件修改日期 2016‎年‎6‎月‎13‎日,‏‎12:01:46 當前時間 14:17進行此文件修改以及check in,並執行構建,此文件修改時間變化 ‎2016‎年‎6‎月‎13‎日,‏‎14:18:19,而其它文件時間並沒有變化。
  5. 依據3,4分析可以提取最后一次發布后的文件進行copy或者ftp,據此構建以下powershell腳本:
$workbasepath = "D:\jenkins1.65\workspace\CI_KKEnterprise(企業端)\EnterpriseCenterPublish"
cd $workbasepath
#獲取最后發布時間
if (Test-Path lastPublish.txt) {
$lastUpdateTime = Get-Content .\lastPublish.txt
#轉化為DateTime類型
$lastUpdateTime = Get-Date $lastUpdateTime[1]
}
else{
$lastUpdateTime = Get-Date 1/1/1997
}
#更新本次發布時間文件
Get-Date > lastPublish.txt
$filePath = "D:\jenkins1.65\workspace\CI_KKEnterprise(企業端)\EnterpriseCenterPublish"
$allFile = Get-ChildItem $filePath -recurse | ?{$_.PsIsContainer -eq $false}
foreach($file in $allFile)
{
    $daySpan = ($file.LastWriteTime)
    #if文件的最后修改時間 大於 最后一次更新時間的保留 其它的刪除
    if ($daySpan -ge $lastUpdateTime)
    {
     $file.FullName,$daySpan ,"$$$$", $lastUpdateTime
    }else{
    $file.FullName,$daySpan, "####" ,$lastUpdateTime
    Remove-Item $file.FullName -Recurse -Force
}
}

只保留本次更新文件,其它文件刪除掉。至此提高tfs自動發布的效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM