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


閱讀目錄

本文版權歸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和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。


免責聲明!

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



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