Udostępnij za pośrednictwem


Wykonywanie wdrożenia z użyciem analizy warunkowej

Autor : Jason Lee

W tym temacie opisano sposób wykonywania wdrożeń "what if" (lub symulowanych) przy użyciu narzędzia Internet Information Services (IIS) Web Deployment Tool (Web Deploy) i VSDBCMD. Dzięki temu można określić wpływ logiki wdrażania na określone środowisko docelowe przed rzeczywistym wdrożeniem aplikacji.

Ten temat stanowi część serii samouczków opartych na wymaganiach dotyczących wdrażania w przedsiębiorstwie fikcyjnej firmy o nazwie Fabrikam, Inc. W tej serii samouczków użyto przykładowego rozwiązania — rozwiązania Contact Manager — do reprezentowania aplikacji internetowej o realistycznym poziomie złożoności, w tym aplikacji ASP.NET MVC 3, usługi Windows Communication Foundation (WCF) i projektu bazy danych.

Metoda wdrażania w centrum tych samouczków jest oparta na metodzie podzielonego pliku projektu opisanej w opisie pliku projektu, w którym proces kompilacji i wdrażania jest kontrolowany przez dwa pliki projektu — jeden zawierający instrukcje kompilacji, które mają zastosowanie do każdego środowiska docelowego, oraz jeden zawierający ustawienia kompilacji i wdrażania specyficzne dla środowiska. W czasie kompilacji plik projektu specyficzny dla środowiska jest scalony z plikiem projektu niezależnego od środowiska w celu utworzenia pełnego zestawu instrukcji kompilacji.

Wykonywanie wdrożenia "What If" dla pakietów sieci Web

Narzędzie Web Deploy zawiera funkcje, które umożliwiają wykonywanie wdrożeń w trybie "what if" (lub wersji próbnej). Podczas wdrażania artefaktów w trybie "what if" narzędzie Web Deploy generuje plik dziennika tak, jakby wykonano wdrożenie, ale w rzeczywistości nie zmienia niczego na serwerze docelowym. Przejrzenie pliku dziennika może pomóc w zrozumieniu, jaki wpływ będzie miało wdrożenie na serwerze docelowym, w szczególności:

  • Co zostanie dodane.
  • Co zostanie zaktualizowane.
  • Co zostanie usunięte.

Ponieważ wdrożenie "co jeśli" nie zmienia niczego na serwerze docelowym, nie zawsze można przewidzieć, czy wdrożenie powiedzie się.

Zgodnie z opisem w temacie Wdrażanie pakietów sieci Web można wdrażać pakiety internetowe przy użyciu narzędzia Web Deploy na dwa sposoby — za pomocą narzędzia wiersza polecenia MSDeploy.exe bezpośrednio lub uruchamiając plik .deploy.cmd generowany przez proces kompilacji.

Jeśli używasz MSDeploy.exe bezpośrednio, możesz uruchomić wdrożenie "what if", dodając flagę –whatif do polecenia. Aby na przykład ocenić, co się stanie w przypadku wdrożenia pakietu ContactManager.Mvc.zip w środowisku przejściowym, polecenie MSDeploy powinno wyglądać podobnie do poniższego. Zwróć uwagę, że w poniższym przykładzie jako symbol zastępczy pary klucz-wartość hasła jest używany $CREDENTIAL_PLACEHOLDER$:

MSDeploy.exe
  -whatif
  -source:package="[path]\ContactManager.Mvc.zip"
  -dest:auto,
        computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
        username="FABRIKAM\stagingdeployer",
        password=$CREDENTIAL_PLACEHOLDER$,
        authtype="Basic",
        includeAcls="False"
  -verb:sync
  -disableLink:AppPoolExtension
  -disableLink:ContentExtension
  -disableLink:CertificateExtension
  -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
  -allowUntrusted

Jeśli wyniki wdrożenia "co jeśli" są zadowalające, możesz usunąć flagę –whatif , aby uruchomić wdrożenie na żywo.

Uwaga

Aby uzyskać więcej informacji na temat opcji wiersza polecenia dla MSDeploy.exe, zobacz Ustawienia operacji narzędzia Web Deploy.

Jeśli używasz pliku .deploy.cmd , możesz uruchomić wdrożenie "what if", uwzględniając flagę /t (tryb próbny) zamiast flagi /y ("tak", lub tryb aktualizacji) w poleceniu. Aby na przykład ocenić, co się stanie w przypadku wdrożenia pakietu ContactManager.Mvc.zip, uruchamiając plik .deploy.cmd , polecenie powinno wyglądać podobnie do następującego:

ContactManager.Mvc.deploy.cmd /t /m:TESTWEB1 /a:NTLM

Jeśli wyniki wdrożenia "w trybie próbnym" są zadowalające, możesz zastąpić flagę /t flagą /y , aby uruchomić wdrożenie na żywo:

ContactManager.Mvc.deploy.cmd /y /m:TESTWEB1 /a:NTLM

Uwaga

Aby uzyskać więcej informacji na temat opcji wiersza polecenia dla plików .deploy.cmd, zobacz How to: Install a Deployment Package Using the deploy.cmd File (Instrukcje: instalowanie pakietu wdrożeniowego przy użyciu pliku deploy.cmd). Jeśli uruchomisz plik .deploy.cmd bez określenia żadnych flag, w wierszu polecenia zostanie wyświetlona lista dostępnych flag.

Wykonywanie wdrożenia "What If" dla baz danych

W tej sekcji założono, że używasz narzędzia VSDBCMD do wykonywania przyrostowego, opartego na schemacie wdrożenia bazy danych. To podejście zostało szczegółowo opisane w temacie Wdrażanie projektów baz danych. Zalecamy zapoznanie się z tym tematem przed zastosowaniem pojęć opisanych tutaj.

W przypadku korzystania z narzędzia VSDBCMD w trybie wdrażania można użyć flagi /dd (lub /DeployToDatabase), aby kontrolować, czy vsDBCMD rzeczywiście wdraża bazę danych, czy po prostu generuje skrypt wdrożenia. Jeśli wdrażasz plik dbschema, jest to zachowanie:

  • Jeśli określisz /dd+ lub /dd, program VSDBCMD wygeneruje skrypt wdrożenia i wdroży bazę danych.
  • Jeśli określisz /dd- lub pominięto przełącznik, vsDBCMD wygeneruje tylko skrypt wdrożenia.

Uwaga

Jeśli wdrażasz plik .deploymanifest, a nie plik dbschema, zachowanie przełącznika /dd jest o wiele bardziej skomplikowane. Zasadniczo vsDBCMD zignoruje wartość przełącznika /dd , jeśli plik deploymanifest zawiera element DeployToDatabase z wartością True. Wdrażanie projektów baz danych opisuje to zachowanie w całości.

Na przykład aby wygenerować skrypt wdrożenia dla bazy danych ContactManager bez faktycznego wdrożenia bazy danych, polecenie VSDBCMD powinno wyglądać następująco:

vsdbcmd.exe /a:Deploy
            /manifest:"…\ContactManager.Database.deploymanifest"
            /cs:"Data Source=TESTDB1;Integrated Security=true"
            /p:TargetDatabase=ContactManager
            /dd-
            /script:"…\Publish-ContactManager-Db.sql"

VSDBCMD jest narzędziem do wdrażania różnicowej bazy danych i dlatego skrypt wdrażania jest generowany dynamicznie, aby zawierał wszystkie polecenia SQL niezbędne do zaktualizowania bieżącej bazy danych, jeśli istnieje, do określonego schematu. Przeglądanie skryptu wdrażania jest przydatnym sposobem określenia wpływu wdrożenia na bieżącą bazę danych i zawartych w niej danych. Możesz na przykład określić:

  • Czy zostaną usunięte istniejące tabele i czy spowoduje to utratę danych.
  • Czy kolejność operacji wiąże się z ryzykiem utraty danych, na przykład w przypadku dzielenia lub scalania tabel.

Jeśli skrypt wdrażania jest zadowolony, możesz powtórzyć polecenie VSDBCMD z flagą /dd+ , aby wprowadzić zmiany. Alternatywnie możesz edytować skrypt wdrożenia, aby spełnić wymagania, a następnie wykonać go ręcznie na serwerze bazy danych.

Integrowanie funkcji "What If" z niestandardowymi plikami projektu

W bardziej złożonych scenariuszach wdrażania należy użyć niestandardowego pliku projektu Microsoft Build Engine (MSBuild), aby hermetyzować logikę kompilacji i wdrażania, zgodnie z opisem w opisie pliku projektu. Na przykład w przykładowym rozwiązaniu Contact Manager plik Publish.proj :

  • Kompiluje rozwiązanie.
  • Używa narzędzia Web Deploy do spakowania i wdrażania aplikacji ContactManager.Mvc.
  • Używa narzędzia Web Deploy do spakowania i wdrażania aplikacji ContactManager.Service.
  • Wdraża bazę danych ContactManager .

W przypadku zintegrowania wdrożenia wielu pakietów internetowych i/lub baz danych w jeden krok w ten sposób można również chcieć wybrać opcję wykonania całego wdrożenia w trybie "co jeżeli".

Plik Publish.proj pokazuje, jak to zrobić. Najpierw należy utworzyć właściwość do przechowywania wartości "what if":

<PropertyGroup>
  <WhatIf Condition=" '$(WhatIf)'=='' ">false</WhatIf>
</PropertyGroup>

W tym przypadku utworzono właściwość o nazwie WhatIf z wartością domyślną false. Użytkownicy mogą zastąpić tę wartość, ustawiając właściwość na true w parametrze wiersza polecenia, jak zobaczysz wkrótce.

Następnym etapem jest sparametryzowanie wszystkich poleceń Web Deploy i VSDBCMD, aby flagi odzwierciedlały wartość właściwości WhatIf . Na przykład następny element docelowy (pobrany z pliku Publish.proj i uproszczony) uruchamia plik .deploy.cmd w celu wdrożenia pakietu internetowego. Domyślnie polecenie zawiera przełącznik /Y ("tak", lub tryb aktualizacji). Jeśli właściwość WhatIf jest ustawiona na wartość true, jest to zastępowane przełącznikiem /T (wersja próbna lub tryb "co jeśli").

<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
  <PropertyGroup>
    <_WhatIfSwitch>/Y</_WhatIfSwitch>
    <_WhatIfSwitch Condition=" '$(WhatIf)'=='true' ">/T</_WhatIfSwitch>
    <_Cmd>%(PublishPackages.FullPath) $(_WhatifSwitch)  
         /M:$(MSDeployComputerName) 
         /U:$(MSDeployUsername) 
         /P:$(MSDeployPassword) 
         /A:$(MSDeployAuth) 
         %(PublishPackages.AdditionalMSDeployParameters)
    </_Cmd>
  </PropertyGroup>
  <Exec Command="$(_Cmd)"/>
</Target>

Podobnie następny element docelowy używa narzędzia VSDBCMD do wdrożenia bazy danych. Domyślnie przełącznik /dd nie jest dołączony. Oznacza to, że narzędzie VSDBCMD wygeneruje skrypt wdrożenia, ale nie wdroży bazy danych — innymi słowy, scenariusz "co jeśli". Jeśli właściwość WhatIf nie ma wartości true, dodawany jest przełącznik /dd , a usługa VSDBCMD wdroży bazę danych.

<Target Name="PublishDbPackages" Outputs="%(DbPublishPackages.Identity)">
  <PropertyGroup>
    <_DbDeployOrScript></_DbDeployOrScript>
    <_DbDeployOrScript Condition=" '$(Whatif)'!='true' ">/dd</_DbDeployOrScript>
    <_Cmd>"$(VsdbCmdExe)" /a:Deploy 
           /cs:"%(DbPublishPackages.DatabaseConnectionString)" 
           /p:TargetDatabase=%(DbPublishPackages.TargetDatabase) 
           /manifest:"%(DbPublishPackages.FullPath)" 
           /script:"$(_CmDbScriptPath)" 
           $(_DbDeployOrScript)
    </_Cmd>
  </PropertyGroup>
  <Exec Command="$(_Cmd)"/>
</Target>

Możesz użyć tego samego podejścia, aby sparametryzować wszystkie odpowiednie polecenia w pliku projektu. Jeśli chcesz uruchomić wdrożenie "what if", możesz po prostu podać wartość właściwości WhatIf z wiersza polecenia:

MSBuild.exe Publish.proj /p:WhatIf=true;TargetEnvPropsFile=EnvConfig\Env-Dev.proj

W ten sposób można uruchomić wdrożenie "what if" dla wszystkich składników projektu w jednym kroku.

Podsumowanie

W tym temacie opisano sposób uruchamiania wdrożeń "what if" przy użyciu narzędzi Web Deploy, VSDBCMD i MSBuild. Wdrożenie "co jeśli" pozwala ocenić wpływ proponowanego wdrożenia przed wprowadzeniem jakichkolwiek zmian w środowisku docelowym.

Dalsze informacje

Aby uzyskać więcej informacji na temat składni wiersza polecenia narzędzia Web Deploy, zobacz Ustawienia operacji narzędzia Web Deploy. Aby uzyskać wskazówki dotyczące opcji wiersza polecenia podczas korzystania z pliku .deploy.cmd , zobacz Instrukcje: instalowanie pakietu wdrożeniowego przy użyciu pliku deploy.cmd. Aby uzyskać wskazówki dotyczące składni wiersza polecenia vsDBCMD, zobacz Dokumentacja wiersza polecenia dla VSDBCMD.EXE (wdrażanie i importowanie schematu).