建立供建置-部署-測試工作流程使用的部署指令碼
若要使用建置-部署-測試工作流程部署應用程式,您必須建立部署指令碼並將它們加入至組建。 部署指令碼是 BAT 或 CMD 檔案,會將您的組建複製到實驗室環境中的電腦。 如果您的組建包含安裝套件,您也可以使用自己的部署指令碼執行安裝套件。 當您建立建置-部署-測試工作流程時,會將命令加入至執行部署指令碼的工作流程。 當您執行工作流程時,組建控制器會在實驗室環境中所指定電腦上的工作目錄中執行這些命令。
請參閱 建立適用於 SCVMM 環境的建置-部署-測試工作流程或 建立適用於標準環境的建置-部署-測試工作流程。 以下章節將討論如何使用建置-部署-測試工作流程建立及使用部署指令碼:
準備建置檔案進行部署
撰寫部署指令碼
建置部署指令碼
設定工作目錄
將部署指令碼加入至工作流程
如需其他範例,請參閱自動化系統測試
需求
- Visual Studio Ultimate, Visual Studio Premium, Visual Studio Test Professional
準備建置檔案進行部署
您選擇安裝應用程式方式將決定您的部署指令碼需要完成的主要工作。 安裝您的應用程式可能只需要將 EXE 複製到用戶端電腦,也可能要執行將檔案安裝到多部電腦的部署套件。 下表描述每一種部署類型的這些工作。
重要
如果在部署應用程式之前,您的應用程式必須有部署指令碼未安裝和設定的必要條件軟體,則您必須在準備實驗室環境中的電腦時手動安裝該軟體。如果您使用部署環境快照的 SCVMM 環境,則必須確保快照中已安裝必要條件軟體。
安裝類型 |
描述 |
||
---|---|---|---|
Web 服務部署套件 |
部署指令碼必須將您的組建檔案和部署套件複製到實驗室環境中的目標電腦上,然後執行部署套件。 若要這麼做,您可能需要將網域名稱、服務帳戶名稱和 TFS 伺服器名稱做為參數傳遞至部署指令碼。 這種類型的安裝通常需要您先手動安裝及設定必要條件軟體,像是 Web 伺服器或資料庫伺服器,才能部署您的應用程式。 必要條件軟體的組態可能會要求您執行特定工作,才能在目標電腦上進行應用程式部署。 例如,如果您的應用程式使用 IIS,則實驗室環境中的 IIS 伺服器必須已先設定 Web Deployment Agent Service,您才能部署應用程式。 |
||
未包含安裝套件的組建檔案 |
部署指令碼必須將您的應用程式和組建檔案複製到實驗室環境中的目標電腦上。 |
||
安裝套件 |
部署指令碼必須將您的安裝套件複製到實驗室環境中的目標電腦上,然後執行安裝套件。 當您的部署指令碼執行安裝套件時,必須確定是以無訊息方式安裝。 安裝所要求的使用者輸入必須由您的部署指令碼處理。 包括認證在內。 如果部署指令碼未處理執行安裝套件時所產生的所有使用者輸入,您的應用程式部署將會失敗。 如果您不是部署 Web 應用程式,而且需要安裝套件來進行部署,建議您使用 InstallShield 安裝套件。 如需 InstallShield 的詳細資訊,請參閱 Windows Installer Deployment。 |
撰寫部署指令碼
以下是部署指令碼最常執行的工作:
取得組建控制器的組建路徑。 您可以將這個路徑傳送至部署指令碼做為命令引數。
指定部署路徑。
建立部署目錄。 您也可以手動執行這項工作,而不使用部署指令碼。 如果您在工作流程中使用預先部署環境快照,您只需要在快照中的虛擬機器上建立目錄即可。
將部署套件從組建路徑複製到您的部署路徑。
在您的部署目錄中執行部署套件。
下列命令將示範部署指令碼經常執行的一些工作。
REM set build path
set buildlocation=%1
REM set deployment path
set targetdir="C:\deploy"
REM create deployment directory
if not exist %targetdir% (cmd /c mkdir %targetdir%)
REM copy build to the deployment directory
xcopy /c /y /e %buildlocation%\*.* %targetdir%
REM if you are using a deployment package you can run it here, after you copy it to your deployment directory
建置部署指令碼
在建立部署指令碼之後,您必須將它們簽入版本控制中,然後進行設定,將它們複製到組建輸出。 若要建置部署指令碼,首先您必須確定指令碼會儲存在您的 Visual Studio 專案中,而不只是在您的方案中。 若要確認儲存位置,您可以在 Visual Studio 的 [方案總管] 中選取您的部署指令碼,然後在 [屬性] 底下將 [複製到輸出目錄] 變更為 [永遠複製]。
設定工作目錄
您可以針對加入至建置-部署-測試工作流程的每一組命令指定工作目錄。 當您指定工作目錄時,組建控制器將會在指派至該角色的每一部電腦上,執行工作目錄中指定的命令。 如果您將命令加入建置-部署-測試工作流程時未指定工作目錄,組建控制器將執行預設工作目錄 C:\Windows\System32 中的命令。
重要
不要使用您加入至建置-部署-測試工作流程的命令建立工作目錄,如果您這樣做,在部署指令碼嘗試將檔案複製到工作目錄之前,將不會建立這些目錄。
如果您指定工作目錄,則必須在部署指令碼將任何檔案複製到工作目錄中之前,確定已建立該目錄。 不要使用您用來將部署指令碼加入至建置-部署-測試工作流程的命令建立工作目錄。 如果您這樣做,在部署指令碼嘗試將檔案複製到目錄之前,將不會建立這些目錄。 若要確保在部署指令碼將檔案複製到工作目錄之前已建立該目錄,您必須在實驗室環境中的目標電腦上手動建立該目錄,或是必須先讓您的部署指令碼建立該目錄,再將任何命令複製到其中。
將部署指令碼加入至工作流程
將 Windows Shell 命令加入至建置-部署-測試工作流程,即可將您的應用程式部署至實驗室環境。 如果您要使用部署指令碼,則命令必須將部署指令碼從組建控制器複製到目標電腦上的工作目錄,然後執行部署指令碼。 不過,對於只需要將少數幾個檔案複製到工作目錄的簡單應用程式安裝,您可以在工作流程中使用 Shell 命令,而不指定外部部署指令碼。
如果您要加入從 Windows 命令提示字元執行的命令 (例如 mkdir) 或執行批次檔,則必須使用 cmd /c 做為命令的開頭。 例如,命令 cmd /c $(BuildLocation)\copyexe $(BuildLocation) (其中 copyexe 是批次檔 copyexe.bat) 會將可執行檔複製到虛擬機器中的本機目錄。
**內建變數:**若您將這些命令加入至建置-部署-測試工作流程,就可以使用內建變數識別特定路徑和電腦。 您也可以將這些變數傳遞至部署指令碼。
$(BuildLocation)
組建檔案所在位置的完整路徑,或組建置放位置 (如果已在建置-部署-測試工作流程中設定此位置)。 使用這個變數可存取您的組建檔案。$(InternalComputerName_<VM Name>)
SCVMM 環境中虛擬機器的電腦名稱。 您可在不知道主機的電腦名稱時,使用這個變數存取虛擬機器主機。 如果您有部署指令碼需要使用電腦名稱來設定 Web 伺服器,您可以將此變數做為引數傳遞給指令碼。 例如,如果 Web 伺服器的虛擬機器名稱是 VM1,而電腦名稱是 MyWebServer,您可以輸入 $(InternalComputerName_VM1) 做為指令碼的引數,這樣就會將值 MyWebServer 傳遞至指令碼。$(ComputerName_<VM Name>)
注意事項 SCVMM 環境中的網路隔離:如果您要在 SCVMM 環境中使用網路隔離,$(InternalComputerName_<VM Name>) 這個值會和每一個環境複本中的虛擬機器執行個體相同,不過 $(ComputerName_<VM Name>) 值不同。
虛擬機器的完整網域名稱。 使用這個變數可從 SCVMM 環境外部存取電腦。 您可以將這個變數做為引數傳遞,以便設定 Web 伺服器。 例如,如果 Web 伺服器的虛擬機器名稱是 VM1,您可以藉由將 $(ComputerName_VM1) 引數傳遞至部署指令碼的方式,存取虛擬機器的完整網域名稱。