建立供建置-部署-測試工作流程使用的部署指令碼
若要部署以建置-部署-測試工作流程的應用程式,您必須建立部署指令碼並將它們加入至您的組建。 部署指令碼是複製你的組建至實驗室環境中的機器的BAT或CMD檔。 如果您的組建包含安裝套件,您也可以使用自己的部署指令碼執行安裝套件。 當您建立建置-部署-測試工作流程時,您在執行部署指令碼將加入指令至工作流程。 當您執行工作流程時,組建控制器會在您實驗室環境的指定電腦的工作目錄執行這些命令。
請參閱 HOW TO:建立適用於 SCVMM 環境的建置-部署-測試工作流程 或 HOW TO:建立適用於標準環境的建置-部署-測試工作流程。 這些章節將討論如何利用建置-部署-測試工作流程建立及使用部署指令碼:
準備建置檔案以進行部署
撰寫部署指令碼
建立部署指令碼
安裝工作目錄
將部署指令碼加入至工作流程
- 內建變數
需求
- Visual Studio Ultimate, Visual Studio Premium, Visual Studio Test Professional
準備建置檔案以進行部署
您選擇的安裝應用程式方式會決定部署指令碼需要執行的主要工作。 安裝您的應用程式可能只包含複製可執行檔到用戶端,也可能包含執行部署套件以安裝檔案在多部電腦上。 下表描述部署的每種類型的工作。
重要
如果在您的應用程式部署之前,您的應用程式倚賴的必要軟體沒有安裝,並設定部署指令碼,您必須手動安裝在您的實驗室環境中的機器。如果您使用部署環境快照的 SCVMM 環境,您必須確保快照已安裝必要軟體。
安裝型別 |
描述 |
---|---|
Web 服務部署套件 |
警告
如果您部署使用 IIS 中的應用程式,在部署您的應用程式前您的實驗室環境中的 IIS 伺服器必須已設定好 Web 部署代理程式服務。
部署指令碼必須複製您的組建檔案和部署套件至您的實驗室環境的目標電腦,然後執行部署套件。 若要這麼做,您可能需要將網域名稱、服務帳戶名稱和 TFS 伺服器名稱加入至部署指令碼做為參數。 這種安裝通常需要您部署應用程式前手動安裝並設定必要軟體 ,例如 Web 伺服器或資料庫伺服器。 必要軟體的設定可能會需要在目標電腦上啟用應用程式組態的特定工作。 例如,如果您的應用程式使用 IIS,在部署您的應用程式前您的實驗室環境的 IIS 伺服器必須已設定 Web 部署代理程式服務。 |
未安裝套件的組建檔案。 |
部署指令碼必須複製到您的應用程式和組建檔案到您實驗室環境的目標電腦上。 |
安裝套件。 |
警告
如果您部署具有建置-部署-測試工作流程的安裝套件,則部署指令碼必須處理在執行您的安裝套件時或您的應用程式部署失敗時產生的任何使用者輸入。
部署指令碼必須複製您的安裝套件到您實驗室環境的目標電腦,然後執行安裝套件。 當您的部署指令碼執行您的安裝套件時,它們必須確定它是無訊息安裝。 安裝所需的使用者輸入必須由您的部署指令碼處理。 這包括認證。 如果在安裝套件時您的部署指令碼不會處理任何產生的使用者輸入,您的應用程式部署將會失敗。 如果您不是部署 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 伺服器。 例如,如果虛擬機器名稱是 VM1 Web 伺服器,您可以藉由將 $(ComputerName_VM1) 引數存取虛擬機器的完整網域名稱為您的部署指令碼。