用批處理來自動化項目編譯及部署(附Demo)

閱讀目錄

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。ui

 

介紹

  一個項目從立項開始,可能就已經根據公司的配置模板將目錄,文檔結構定義出來。有動態庫,也有靜態庫,在沒有專門的CMO的時候,每每組長,若干開發人員承擔版本發佈的工做。次工做即枯燥,又容易出錯,那麼怎麼樣才能將這樣的工做略微自動化點。如下就經過很簡單的很古老的批處理來略微自動化下。spa

詳細

一:目錄結構

  每一個公司的目錄結構不同,當略有相同,好比:管理庫,需求庫,設計庫,代碼庫,引用庫(包庫),資源庫,編譯模板庫,編譯版本庫,發佈版本庫等。
以下圖:.net

二:生成臨時版本流程:

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。插件

  通常的比較正規的是:發佈人員獲取因此同步,而後編譯,而後將編譯的release下的各個文件夾拷貝出來,作記錄,放到臨時版本庫中。也有筒靴可能會說,本身把項目的編譯生成路徑改到對應的地方不就OK了,雖然能夠,但有時候狀況比較特殊,好比都是插件開發,把路徑改了,就很差調試了,不可能每一個多附加進程調試吧。
  因此咱們要解決的是怎麼經過批處理來進行自動化編譯和將編譯完成文件複製到對應目錄。debug

三:批處理

  後綴爲.bat的文件就是批處理文件。如下就對比較長用到的命令作個簡單描述:設計

echo 和 @回顯控制命令
echo off #從下一行開始關閉回顯
echo on #從下一行開始打開回顯3d

md建立目錄
md abc #在當前目錄裏創建子目錄 abc
md d:\a\b\c #若是 d:\a 不存在,將會自動建立調試

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。code

copy拷貝文件
copy c:\test.txt d:\複製 c:\test.txt 文件到 d:\
copy c:\test.txt d:\test.bak複製 c:\test.txt 文件到 d:\ ,並重命名爲 test.bak
copy c:\*.*複製 c:\ 全部文件到當前目錄,不包括隱藏文件和系統文件不指定目標路徑,則默認目標路徑爲當前目錄
copy con test.txt從屏幕上等待輸入,按 Ctrl+Z 結束輸入,輸入內容存爲test.txt文件con表明屏幕,prn表明打印機blog

pause暫停命令
運行該命令時,將顯示下面的消息:請按任意鍵繼續 . . .
通常用於看清楚屏幕上顯示的內容

set設置變量
引用變量可在變量名先後加 % ,即 %變量名%
set #顯示目前全部可用的變量,包括系統變量和自定義的變量
echo %SystemDrive% #顯示系統盤盤符。系統變量能夠直接引用
set p #顯示全部以p開頭的變量,要是一個也沒有就設errorlevel=1
set p=aa1bb1aa2bb2 #設置變量p,並賦值爲 = 後面的字符串,即aa1bb1aa2bb2

echo %p% #顯示變量p表明的字符串,即aa1bb1aa2bb2

處理

一:模擬場景

  現建有馬戲團項目(Circus),項目中有Circus工程,Cat工程,Dog工程。

Circus是用來進行表演的。Circus不引用Cat,Dog(用接口,但先不定義接口)

Cat是貓動物的表演技能。

Dog是狗動物的表演技能。

先假設輸出目錄中有Circus主目錄,主目錄下有Driver子目錄,Cat和Dog的編譯輸出均在Driver下,而且以本身自己的名字建個目錄。

二:構建項目

三:編寫bat文件

設置輸出路徑

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。

「debugOrRelease」這個變量是來控制是編譯debug仍是release
@echo off
set debugOrRelease=Release
set baseOutPath=..\09.臨時版本\Circus\%debugOrRelease%
set driverOutPath=%baseOutPath%\Config
set catPath=%driverOutPath%\Cat
set dogPath=%driverOutPath%\Dog

設置輸入路徑

set catInPath=Cat\bin\%debugOrRelease%
set dogInPath=Dog\bin\%debugOrRelease%

打印輸出路徑

echo 輸出路徑
echo.%driverOutPath%
echo.%catPath%
echo.%dogPath%

編譯

若是有多解決方案(sln)能夠中間加pause,防止編譯出錯的信息忽略掉。

@PAUSE 
echo 開始編譯

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。

%windir%\microsoft.net\framework\v4.0.30319\msbuild  Circus.sln /p:Configuration=%debugOrRelease% /t:Rebuild

建立驅動目錄

@PAUSE
echo 開始複製
if not exist %catPath% md  %catPath%
if not exist %dogPath% md  %catPath%

複製驅動

其中用到兩種方式,一種是單個文件複製,一種是文件夾複製

echo 複製Circus
xcopy %CircusInPath% %baseOutPath% /S /Y

echo 複製Cat
copy %catInPath%\Cat.dll %catPath% /Y

echo 複製Dog
xcopy %dogInPath% %dogPath% /S /Y

echo 複製完畢
@PAUSE

結論

  上述輸出:

 



 


 

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。

從上述輸出的結果咱們能夠看出,咱們預期的目的已經完成。這樣即簡單又自動化,下降人爲帶來的錯誤。

Demo下載

源碼下載

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。

相關文章
相關標籤/搜索