Sınama Dağıtımı Gerçekleştirme

tarafından Jason Lee

Bu konuda, Internet Information Services (IIS) Web Dağıtım Aracı (Web Dağıtımı) ve VSDBCMD kullanılarak "durum" (veya simülasyon) dağıtımlarının nasıl gerçekleştirılacağı açıklanmaktadır. Bu, uygulamanızı gerçekten dağıtmadan önce dağıtım mantığınızın belirli bir hedef ortamdaki etkilerini belirlemenizi sağlar.

Bu konu, Fabrikam, Inc adlı kurgusal bir şirketin kurumsal dağıtım gereksinimlerini temel alan bir dizi öğreticinin bir parçasını oluşturur. Bu öğretici serisinde, ASP.NET MVC 3 uygulaması, Windows Communication Foundation (WCF) hizmeti ve veritabanı projesi dahil olmak üzere gerçekçi bir karmaşıklık düzeyine sahip bir web uygulamasını temsil etmek için örnek bir çözüm (Contact Manager çözümü) kullanılır.

Bu öğreticilerin temelindeki dağıtım yöntemi, derleme ve dağıtım işleminin iki proje dosyası tarafından denetlendiği Proje Dosyasını Anlama bölümünde açıklanan bölünmüş proje dosyası yaklaşımını temel alır: biri her hedef ortama uygulanan derleme yönergelerini, diğeri ise ortama özgü derleme ve dağıtım ayarlarını içerir. Derleme zamanında, ortama özgü proje dosyası, tam bir derleme yönergeleri kümesi oluşturmak için ortama bağımsız proje dosyasıyla birleştirilir.

Web Paketleri için "Durum" Dağıtımı Gerçekleştirme

Web Dağıtımı, dağıtımları "durum" (veya deneme) modunda gerçekleştirmenizi sağlayan işlevler içerir. Yapıtları "durum" modunda dağıttığınızda, Web Dağıtımı dağıtımı gerçekleştirmişsiniz gibi bir günlük dosyası oluşturur, ancak hedef sunucudaki hiçbir şeyi değiştirmez. Günlük dosyasını gözden geçirmek, dağıtımınızın hedef sunucuda nasıl bir etkisi olacağını anlamanıza yardımcı olabilir; özellikle:

  • Eklenecekler.
  • Nelerin güncelleştirileceği.
  • Silinecek öğeler.

"Ne olursa olsun" dağıtımı hedef sunucudaki herhangi bir şeyi gerçekten değiştirmediğinden, her zaman gerçekleştiremeyeceği bir dağıtımın başarılı olup olmayacağını tahmin etmektir.

Web Paketlerini Dağıtma bölümünde açıklandığı gibi, Web Dağıtımı'nı kullanarak web paketlerini iki şekilde dağıtabilirsiniz: doğrudan MSDeploy.exe komut satırı yardımcı programını kullanarak veya derleme işleminin oluşturduğu .deploy.cmd dosyasını çalıştırarak.

doğrudan MSDeploy.exe kullanıyorsanız komutunuza –whatif bayrağını ekleyerek "durum" dağıtımını çalıştırabilirsiniz. Örneğin, ContactManager.Mvc.zip paketini bir hazırlama ortamına dağıttıysanız ne olacağını değerlendirmek için MSDeploy komutu aşağıdakine benzer olmalıdır. Aşağıdaki örnekte parola anahtar-değer çifti için yer tutucu olarak $CREDENTIAL_PLACEHOLDER$ kullanıldığına dikkat edin:

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

"Durum" dağıtımınızın sonuçlarından memnun kaldığınızda canlı dağıtım çalıştırmak için –whatif bayrağını kaldırabilirsiniz.

Not

MSDeploy.exe komut satırı seçenekleri hakkında daha fazla bilgi için bkz. Web Dağıtımı İşlem Ayarları.

.deploy.cmd dosyasını kullanıyorsanız, komutunuzda /y bayrağı ("evet" veya güncelleştirme modu) yerine /t bayrağı (deneme modu) bayrağını ekleyerek "durum" dağıtımını çalıştırabilirsiniz. Örneğin, .deploy.cmd dosyasını çalıştırarak ContactManager.Mvc.zip paketini dağıttıysanız ne olacağını değerlendirmek için komutunuz şuna benzer olmalıdır:

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

"Deneme modu" dağıtımınızın sonuçlarından memnun olduğunuzda canlı dağıtım çalıştırmak için /t bayrağını /y bayrağıyla değiştirebilirsiniz:

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

Not

.deploy.cmd dosyalarının komut satırı seçenekleri hakkında daha fazla bilgi için bkz. Nasıl yapılır: deploy.cmd Dosyasını Kullanarak Dağıtım Paketi Yükleme. .deploy.cmd dosyasını herhangi bir bayrak belirtmeden çalıştırırsanız, komut istemi kullanılabilir bayrakların listesini görüntüler.

Veritabanları için "Durum" Dağıtımı Gerçekleştirme

Bu bölümde, artımlı, şema tabanlı veritabanı dağıtımı gerçekleştirmek için VSDBCMD yardımcı programını kullandığınız varsayılır. Bu yaklaşım , Veritabanı Projelerini Dağıtma başlığında daha ayrıntılı olarak açıklanmıştır. Burada açıklanan kavramları uygulamadan önce bu konuya alışmanızı öneririz.

VSDBCMD'yi Dağıtım modunda kullandığınızda, VSDBCMD'nin veritabanını gerçekten dağıtıp dağıtmadığını veya yalnızca bir dağıtım betiği oluşturup oluşturmadığını denetlemek için /dd (veya /DeployToDatabase) bayrağını kullanabilirsiniz. Bir .dbschema dosyası dağıtıyorsanız, davranış şöyledir:

  • /dd+ veya /dd belirtirseniz, VSDBCMD bir dağıtım betiği oluşturur ve veritabanını dağıtır.
  • /dd- belirtir veya anahtarı atlarsanız, VSDBCMD yalnızca bir dağıtım betiği oluşturur.

Not

.dbschema dosyası yerine .deploymanifest dosyası dağıtıyorsanız , /dd anahtarının davranışı çok daha karmaşıktır. Temelde, .deploymanifest dosyası True değerine sahip bir DeployToDatabase öğesi içeriyorsa VSDBCMD /dd anahtarının değerini yoksayar. Veritabanı Projelerinin dağıtılması bu davranışı tam olarak açıklar.

Örneğin, veritabanını gerçekten dağıtmadan ContactManager veritabanı için bir dağıtım betiği oluşturmak için VSDBCMD komutunuz şuna benzer olmalıdır:

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 bir fark veritabanı dağıtım aracıdır ve bu nedenle dağıtım betiği, varsa geçerli veritabanını belirtilen şemaya güncelleştirmek için gereken tüm SQL komutlarını içerecek şekilde dinamik olarak oluşturulur. Dağıtım betiğini gözden geçirmek, dağıtımınızın geçerli veritabanı ve içerdiği veriler üzerindeki etkisini belirlemenin yararlı bir yoludur. Örneğin, şunları belirlemek isteyebilirsiniz:

  • Mevcut tabloların kaldırılıp kaldırılmayacağı ve bunun veri kaybına neden olup olmayacağı.
  • İşlem sırasının veri kaybı riski taşıyıp taşımadığı, örneğin tabloları bölüyor veya birleştiriyorsanız.

Dağıtım betiğinden memnunsanız, değişiklikleri yapmak için VSDBCMD'yi /dd+ bayrağıyla tekrarlayabilirsiniz. Alternatif olarak, dağıtım betiğini gereksinimlerinizi karşılayacak şekilde düzenleyebilir ve ardından veritabanı sunucusunda el ile yürütebilirsiniz.

"What If" İşlevselliğini Özel Proje Dosyalarıyla Tümleştirme

Daha karmaşık dağıtım senaryolarında, Proje Dosyasını Anlama bölümünde açıklandığı gibi derleme ve dağıtım mantığınızı kapsüllemek için özel bir Microsoft Build Engine (MSBuild) proje dosyası kullanmak isteyeceksiniz. Örneğin, Contact Manager örnek çözümünde Publish.proj dosyası:

  • Çözümü oluşturur.
  • ContactManager.Mvc uygulamasını paketlemek ve dağıtmak için Web Dağıtımı'nı kullanır.
  • ContactManager.Service uygulamasını paketlemek ve dağıtmak için Web Dağıtımı'nı kullanır.
  • ContactManager veritabanını dağıtır.

Birden çok web paketinin ve/veya veritabanının dağıtımını bu şekilde tek adımlı bir işlemle tümleştirdiğinizde, dağıtımın tamamını "durum" modunda gerçekleştirme seçeneğini de isteyebilirsiniz.

Publish.proj dosyası bunu nasıl yapabileceğinizi gösterir. İlk olarak, "what if" değerini depolamak için bir özellik oluşturmanız gerekir:

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

Bu durumda, varsayılan değeri false olan WhatIf adlı bir özellik oluşturdunuz. Kullanıcılar, kısa süre içinde göreceğiniz gibi bir komut satırı parametresinde özelliğini true olarak ayarlayarak bu değeri geçersiz kılabilir.

Sonraki aşama, bayrakların WhatIf özellik değerini yansıtması için tüm Web Deploy ve VSDBCMD komutlarını parametreleştirmektir. Örneğin, sonraki hedef ( Publish.proj dosyasından alınan ve basitleştirilmiş) bir web paketi dağıtmak için .deploy.cmd dosyasını çalıştırır. Varsayılan olarak, komut bir /Y anahtarı ("evet" veya güncelleştirme modu) içerir. WhatIftrue olarak ayarlandıysa, bunun yerine bir /T anahtarı (deneme veya "durum" modu) kullanılır.

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

Benzer şekilde, sonraki hedef veritabanını dağıtmak için VSDBCMD yardımcı programını kullanır. Varsayılan olarak, /dd anahtarı dahil değildir. Bu, VSDBCMD'nin bir dağıtım betiği oluşturacağı ancak veritabanını dağıtmayacağı anlamına gelir; başka bir deyişle bir "durum" senaryosudur. WhatIf özelliği true olarak ayarlanmadıysa bir /dd anahtarı eklenir ve VSDBCMD veritabanını dağıtır.

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

Proje dosyanızdaki tüm ilgili komutları parametreleştirmek için aynı yaklaşımı kullanabilirsiniz. Bir "durum" dağıtımı çalıştırmak istediğinizde, komut satırından bir WhatIf özellik değeri sağlamanız yeterlidir:

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

Bu şekilde, tek bir adımda tüm proje bileşenleriniz için bir "durum" dağıtımı çalıştırabilirsiniz.

Sonuç

Bu konuda Web Deploy, VSDBCMD ve MSBuild kullanarak "durum" dağıtımlarının nasıl çalıştırılacağı açıklanmıştır. "Durum" dağıtımı, hedef ortamda herhangi bir değişiklik yapmadan önce önerilen dağıtımın etkisini değerlendirmenize olanak tanır.

Daha Fazla Bilgi

Web Dağıtımı komut satırı söz dizimi hakkında daha fazla bilgi için bkz. Web Dağıtımı İşlem Ayarları. .deploy.cmd dosyasını kullanırken komut satırı seçenekleriyle ilgili yönergeler için bkz. Nasıl yapılır: Deploy.cmd Dosyasını Kullanarak Dağıtım Paketi Yükleme. VSDBCMD komut satırı söz dizimi hakkında yönergeler için bkz. VSDBCMD.EXE için Komut Satırı Başvurusu (Dağıtım ve Şema İçeri Aktarma).