Sdílet prostřednictvím


Nasazení typu „What If“

Jason Lee

Toto téma popisuje, jak provádět "co kdyby" (neboli simulovaná) nasazení pomocí nástroje pro nasazení webu Internetové informační služby (IIS) a nástroje VSDBCMD. To vám umožní určit účinky logiky nasazení na konkrétní cílové prostředí před tím, než aplikaci skutečně nasadíte.

Toto téma je součástí série kurzů založených na požadavcích na podnikové nasazení fiktivní společnosti s názvem Fabrikam, Inc. Tato série kurzů používá ukázkové řešení – řešení Contact Manager – k reprezentaci webové aplikace s realistickou úrovní složitosti, včetně aplikace ASP.NET MVC 3, služby WCF (Windows Communication Foundation) a databázového projektu.

Metoda nasazení, která je jádrem těchto kurzů, je založená na přístupu založeném na rozdělených souborech projektu popsaném v tématu Vysvětlení souboru projektu, ve kterém je proces sestavení a nasazení řízen dvěma soubory projektu – jedním obsahujícím pokyny k sestavení, které platí pro každé cílové prostředí, a jedním obsahujícím nastavení sestavení a nasazení specifické pro prostředí. V době sestavení se soubor projektu specifického pro prostředí sloučí do souboru projektu nezávislého na prostředí, aby se vytvořila úplná sada pokynů k sestavení.

Provedení nasazení What If pro webové balíčky

Nasazení webu zahrnuje funkci, která umožňuje provádět nasazení v režimu "co kdyby" (nebo zkušební verze). Když nasadíte artefakty v režimu "co kdyby", nástroj Nasazení webu vygeneruje soubor protokolu, jako byste provedli nasazení, ale na cílovém serveru ve skutečnosti nic nezmění. Kontrola souboru protokolu vám může pomoct pochopit, jaký dopad bude mít vaše nasazení zejména na cílový server:

  • Co se přidá.
  • Co se bude aktualizovat.
  • Co se odstraní.

Vzhledem k tomu, že nasazení "co kdyby" na cílovém serveru ve skutečnosti nic nemění, nemůže vždy předpovědět, jestli nasazení proběhne úspěšně.

Jak je popsáno v tématu Nasazení webových balíčků, můžete nasadit webové balíčky pomocí nasazení webu dvěma způsoby – přímo pomocí nástroje příkazového řádku MSDeploy.exe nebo spuštěním souboru .deploy.cmd , který vygeneruje proces sestavení.

Pokud používáte MSDeploy.exe přímo, můžete spustit nasazení citlivostní analýzy tak, že do příkazu přidáte příznak –whatif . Pokud například chcete vyhodnotit, co by se stalo, kdybyste nasadili balíček ContactManager.Mvc.zip do přípravného prostředí, měl by příkaz MSDeploy vypadat nějak takto. Všimněte si, že následující příklad používá $CREDENTIAL_PLACEHOLDER$ jako zástupný symbol pro pár klíč-hodnota hesla:

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

Pokud jste s výsledky nasazení "co kdyby" spokojení, můžete odebrat příznak –whatif a spustit tak živé nasazení.

Poznámka

Další informace o možnostech příkazového řádku pro MSDeploy.exe najdete v tématu Nastavení operace nasazení webu.

Pokud používáte soubor .deploy.cmd , můžete spustit nasazení citlivostní analýzy tak, že do příkazu zahrnete příznak /t (zkušební režim) místo příznaku /y (ano nebo režim aktualizace). Pokud například chcete vyhodnotit, co by se stalo, kdybyste balíček ContactManager.Mvc.zip nasadili spuštěním souboru .deploy.cmd , měl by příkaz vypadat takto:

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

Pokud jste s výsledky nasazení ve zkušebním režimu spokojení, můžete nahradit příznak /t příznakem /y a spustit tak živé nasazení:

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

Poznámka

Další informace o možnostech příkazového řádku pro soubory .deploy.cmd najdete v tématu Postupy: Instalace balíčku pro nasazení pomocí souboru deploy.cmd. Pokud spustíte soubor .deploy.cmd bez zadání příznaků, zobrazí se na příkazovém řádku seznam dostupných příznaků.

Provedení nasazení What If pro databáze

V této části se předpokládá, že k inkrementálnímu nasazení databáze založenému na schématu používáte nástroj VSDBCMD. Tento přístup je podrobněji popsaný v tématu Nasazení databázových projektů. Doporučujeme, abyste se s tímto tématem seznámili dříve, než použijete zde popsané koncepty.

Pokud používáte VSDBCMD v režimu nasazení , můžete použít příznak /dd (nebo /DeployToDatabase) k řízení, jestli VSDBCMD skutečně nasadí databázi, nebo jen vygeneruje skript nasazení. Pokud nasazujete soubor .dbschema, jedná se o toto chování:

  • Pokud zadáte /dd+ nebo /dd, VSDBCMD vygeneruje skript nasazení a nasadí databázi.
  • Pokud zadáte /dd- nebo vynecháte přepínač, VSDBCMD vygeneruje pouze skript nasazení.

Poznámka

Pokud nasazujete soubor .deploymanifest místo souboru .dbschema, je chování přepínače /dd mnohem složitější. V podstatě bude VSDBCMD ignorovat hodnotu přepínače /dd , pokud soubor .deploymanifest obsahuje element DeployToDatabase s hodnotou True. Nasazení databázových projektů popisuje toto chování v plném rozsahu.

Pokud například chcete vygenerovat skript nasazení pro databázi ContactManager , aniž byste databázi skutečně nasadili, měl by příkaz VSDBCMD vypadat takto:

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 je nástroj pro nasazení rozdílové databáze, a proto se skript nasazení dynamicky generuje tak, aby obsahoval všechny příkazy SQL potřebné k aktualizaci aktuální databáze (pokud existuje) na zadané schéma. Kontrola skriptu nasazení je užitečný způsob, jak zjistit, jaký dopad bude mít nasazení na aktuální databázi a data, která obsahuje. Můžete například určit:

  • Jestli se odeberou nějaké existující tabulky a jestli to povede ke ztrátě dat.
  • Určuje, jestli pořadí operací představuje riziko ztráty dat, například při rozdělování nebo slučování tabulek.

Pokud jste se skriptem nasazení spokojeni, můžete změny provést opakováním VSDBCMD s příznakem /dd+ . Případně můžete skript nasazení upravit tak, aby splňoval vaše požadavky, a pak ho spustit ručně na databázovém serveru.

Integrace funkce Citlivostní analýzy do vlastních souborů projektu

Ve složitějších scénářích nasazení budete chtít použít vlastní soubor projektu Microsoft Build Engine (MSBuild) k zapouzdření logiky sestavení a nasazení, jak je popsáno v tématu Vysvětlení souboru projektu. Například v ukázkovém řešení Aplikace Contact Manager soubor Publish.proj :

  • Sestaví řešení.
  • Použije nasazení webu k zabalení a nasazení aplikace ContactManager.Mvc.
  • Používá nasazení webu k zabalení a nasazení aplikace ContactManager.Service.
  • Nasadí databázi ContactManager .

Když tímto způsobem integrujete nasazení více webových balíčků nebo databází do jednoho kroku procesu, můžete také chtít provést celé nasazení v režimu "co kdyby".

Soubor Publish.proj ukazuje, jak to udělat. Nejprve je potřeba vytvořit vlastnost pro uložení hodnoty citlivostní analýzy:

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

V tomto případě jste vytvořili vlastnost s názvem WhatIf s výchozí hodnotou false. Uživatelé můžou tuto hodnotu přepsat nastavením vlastnosti na true v parametru příkazového řádku, jak uvidíte za chvíli.

Další fází je parametrizace všech příkazů Nasazení webu a VSDBCMD tak, aby příznaky odrážely hodnotu vlastnosti WhatIf . Například další cíl (převzatý ze souboru Publish.proj a zjednodušený) spustí soubor .deploy.cmd pro nasazení webového balíčku. Ve výchozím nastavení příkaz obsahuje přepínač /Y (ano nebo režim aktualizace). Pokud je hodnota WhatIf nastavená na hodnotu true, nahradí se přepínačem /T (zkušební režim neboli režim citlivostní analýzy).

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

Podobně další cíl používá nástroj VSDBCMD k nasazení databáze. Ve výchozím nastavení přepínač /dd není zahrnut. To znamená, že VSDBCMD vygeneruje skript nasazení, ale nenasadí databázi – jinými slovy scénář "co kdyby". Pokud WhatIf vlastnost není nastavena na true, je přidán přepínač /dd a VSDBCMD nasadí databázi.

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

Stejný přístup můžete použít k parametrizaci všech relevantních příkazů v souboru projektu. Pokud chcete spustit nasazení "co kdyby", můžete jednoduše zadat hodnotu vlastnosti WhatIf z příkazového řádku:

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

Tímto způsobem můžete spustit nasazení "citlivostní analýzy" pro všechny komponenty projektu v jednom kroku.

Závěr

Toto téma popisuje, jak spouštět nasazení citlivostní analýzy pomocí nasazení webu, nástroje VSDBCMD a nástroje MSBuild. Nasazení "citlivostní analýzy" umožňuje vyhodnotit dopad navrhovaného nasazení před tím, než skutečně provedete jakékoli změny v cílovém prostředí.

Další čtení

Další informace o syntaxi příkazového řádku Nasazení webu najdete v tématu Nastavení operace nasazení webu. Pokyny k možnostem příkazového řádku při použití souboru .deploy.cmd najdete v tématu Postupy: Instalace balíčku pro nasazení pomocí souboru deploy.cmd. Pokyny k syntaxi příkazového řádku VSDBCMD najdete v tématu Referenční informace k příkazovému řádku pro VSDBCMD.EXE (nasazení a import schématu).