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

sinodzh發表於2014-06-03

閱讀目錄

本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。

 

介紹

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

詳細

一:目錄結構

  每個公司的目錄結構不一樣,當略有相同,比如:管理庫,需求庫,設計庫,程式碼庫,引用庫(包庫),資源庫,編譯模板庫,編譯版本庫,釋出版本庫等。
如下圖:

二:生成臨時版本流程:

本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。

  一般的比較正規的是:釋出人員獲取所以同步,然後編譯,然後將編譯的release下的各個資料夾拷貝出來,做記錄,放到臨時版本庫中。也有筒靴可能會說,自己把專案的編譯生成路徑改到對應的地方不就OK了,雖然可以,但有時候情況比較特殊,比如都是外掛開發,把路徑改了,就不好除錯了,不可能每個多附加程式除錯吧。
  所以我們要解決的是怎麼通過批處理來進行自動化編譯和將編譯完成檔案複製到對應目錄。

三:批處理

  字尾為.bat的檔案就是批處理檔案。以下就對比較長用到的命令做個簡單描述:

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

md建立目錄
md abc #在當前目錄裡建立子目錄 abc
md d:\a\b\c #如果 d:\a 不存在,將會自動建立

本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。

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代表印表機

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和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。

相關文章