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

2021-07-09 14:44:09 字數 3420 閱讀 4217

閱讀目錄

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

一:目錄結構

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

如下圖:

二:生成臨時版本流程:

一般的比較正規的是:發布人員獲取所以同步,然後編譯,然後將編譯的release下的各個資料夾拷貝出來,做記錄,放到臨時版本庫中。也有筒靴可能會說,自己把專案的編譯生成路徑改到對應的地方不就ok了,雖然可以,但有時候情況比較特殊,比如都是外掛程式開發,把路徑改了,就不好除錯了,不可能每個多附加程序除錯吧。

所以我們要解決的是怎麼通過批處理來進行自動化編譯和將編譯完成檔案複製到對應目錄。

三:批處理

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

echo 和 @回顯控制命令

echo off #從下一行開始關閉回顯

echo on #從下一行開始開啟回顯

md建立目錄

md abc #在當前目錄裡建立子目錄 abc

md d:\a\b\c #如果 d:\a 不存在,將會自動建立

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檔案

設定輸出路徑

「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 開始編譯

%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

上述輸出:

從上述輸出的結果我們可以看出,我們預期的目的已經完成。這樣即簡單又自動化,降低人為帶來的錯誤。

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

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

docker 自動化部署vue 專案

最近把專案的部署換成了自動化部署,採用jenkins docker docker compose 阿里雲容器映象服務 本來一開始是拉取 在自己伺服器上build的,考慮到自己伺服器的效能,最後還是採用了阿里雲的 記錄一下docker部署 vue 的過程。node 構建 nginx 發布 from n...

小案例 批處理實現簡單的自動化

最近在本部門工測試工程師的影響下,開始自學批處理,頭比較大,尤其是for迴圈這一部分,學習了有乙個星期有餘了,目前了解一些簡單的語法,於是也嘗試做點小小的自動化,算是給自己這種小菜鳥一點鼓勵吧 1 在windows下檢視電腦上的apk資訊,包括包名和版本號。有時候測試需要,會要知道該apk的包名和版...