Bagikan melalui


Melakukan Penyebaran "Bagaimana Jika"

oleh Jason Lee

Topik ini menjelaskan cara melakukan penyebaran "bagaimana jika" (atau disimulasikan) menggunakan Alat Penyebaran Web (Web Deploy) Internet Information Services (IIS) dan VSDBCMD. Ini memungkinkan Anda menentukan efek logika penyebaran Anda pada lingkungan target tertentu sebelum Anda benar-benar menyebarkan aplikasi Anda.

Topik ini merupakan bagian dari serangkaian tutorial yang didasarkan pada persyaratan penyebaran perusahaan dari perusahaan fiktif bernama Fabrikam, Inc. Seri tutorial ini menggunakan solusi sampel— solusi Contact Manager—untuk mewakili aplikasi web dengan tingkat kompleksitas yang realistis, termasuk aplikasi MVC 3 ASP.NET, layanan Windows Communication Foundation (WCF), dan proyek database.

Metode penyebaran di jantung tutorial ini didasarkan pada pendekatan file proyek terpisah yang dijelaskan dalam Memahami File Proyek, di mana proses build dan penyebaran dikendalikan oleh dua file proyek —satu berisi instruksi build yang berlaku untuk setiap lingkungan tujuan, dan satu yang berisi pengaturan build dan penyebaran khusus lingkungan. Pada waktu build, file proyek khusus lingkungan digabungkan ke dalam file proyek agnostik lingkungan untuk membentuk serangkaian instruksi build lengkap.

Melakukan Penyebaran "Bagaimana Jika" untuk Paket Web

Web Deploy menyertakan fungsionalitas yang memungkinkan Anda melakukan penyebaran dalam mode "bagaimana jika" (atau uji coba). Saat Anda menyebarkan artefak dalam mode "bagaimana jika", Web Deploy menghasilkan file log seolah-olah Anda telah melakukan penyebaran, tetapi sebenarnya tidak mengubah apa pun di server tujuan. Meninjau file log dapat membantu Anda memahami apa dampak penyebaran Anda di server tujuan, khususnya:

  • Apa yang akan ditambahkan.
  • Apa yang akan diperbarui.
  • Apa yang akan dihapus.

Karena penyebaran "bagaimana jika" sebenarnya tidak mengubah apa pun di server tujuan, apa yang tidak selalu dapat dilakukan adalah memprediksi apakah penyebaran akan berhasil.

Seperti yang dijelaskan dalam Menyebarkan Paket Web, Anda dapat menyebarkan paket web menggunakan Web Deploy dengan dua cara—dengan menggunakan utilitas baris perintah MSDeploy.exe secara langsung atau dengan menjalankan file .deploy.cmd yang dihasilkan proses build.

Jika Anda menggunakan MSDeploy.exe secara langsung, Anda dapat menjalankan penyebaran "bagaimana jika" dengan menambahkan bendera –whatif ke perintah Anda. Misalnya, untuk mengevaluasi apa yang akan terjadi jika Anda menyebarkan paket ContactManager.Mvc.zip ke lingkungan penahapan, perintah MSDeploy harus menyerupai berikut ini. Perhatikan contoh berikut menggunakan $CREDENTIAL_PLACEHOLDER$ sebagai tempat penampung untuk pasangan kunci-nilai kata sandi:

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

Ketika Anda puas dengan hasil penyebaran "bagaimana jika", Anda dapat menghapus bendera –whatif untuk menjalankan penyebaran langsung.

Catatan

Untuk informasi selengkapnya tentang opsi baris perintah untuk MSDeploy.exe, lihat Pengaturan Operasi Penyebaran Web.

Jika Anda menggunakan file .deploy.cmd , Anda dapat menjalankan penyebaran "bagaimana jika" dengan menyertakan bendera /t (mode uji coba) alih-alih bendera /y ("ya," atau mode pembaruan) dalam perintah Anda. Misalnya, untuk mengevaluasi apa yang akan terjadi jika Anda menyebarkan paket ContactManager.Mvc.zip dengan menjalankan file .deploy.cmd , perintah Anda harus menyerupai ini:

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

Ketika Anda puas dengan hasil penyebaran "mode uji coba", Anda dapat mengganti bendera /t dengan bendera /y untuk menjalankan penyebaran langsung:

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

Catatan

Untuk informasi selengkapnya tentang opsi baris perintah untuk file .deploy.cmd , lihat Cara: Menginstal Paket Penyebaran Menggunakan File deploy.cmd. Jika Anda menjalankan file .deploy.cmd tanpa menentukan bendera apa pun, perintah akan menampilkan daftar bendera yang tersedia.

Melakukan Penyebaran "Bagaimana Jika" untuk Database

Bagian ini mengasumsikan bahwa Anda menggunakan utilitas VSDBCMD untuk melakukan penyebaran database berbasis skema bertahap. Pendekatan ini dijelaskan secara lebih rinci dalam Menyebarkan Proyek Database. Kami menyarankan agar Anda membiasakan diri dengan topik ini sebelum menerapkan konsep yang dijelaskan di sini.

Saat Anda menggunakan VSDBCMD dalam mode Sebarkan , Anda dapat menggunakan bendera /dd (atau /DeployToDatabase) untuk mengontrol apakah VSDBCMD benar-benar menyebarkan database atau hanya menghasilkan skrip penyebaran. Jika Anda menyebarkan file .dbschema, ini adalah perilakunya:

  • Jika Anda menentukan /dd+ atau /dd, VSDBCMD akan menghasilkan skrip penyebaran dan menyebarkan database.
  • Jika Anda menentukan /dd- atau menghilangkan sakelar, VSDBCMD hanya akan menghasilkan skrip penyebaran.

Catatan

Jika Anda menyebarkan file .deploymanifest daripada file .dbschema, perilaku sakelar /dd jauh lebih rumit. Pada dasarnya, VSDBCMD akan mengabaikan nilai sakelar /dd jika file .deploymanifest menyertakan elemen DeployToDatabase dengan nilai True. Menyebarkan Proyek Database menjelaskan perilaku ini secara penuh.

Misalnya, untuk menghasilkan skrip penyebaran untuk database ContactManager tanpa benar-benar menyebarkan database, perintah VSDBCMD Anda harus menyerupai ini:

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 adalah alat penyebaran database diferensial, dan dengan demikian skrip penyebaran dibuat secara dinamis untuk berisi semua perintah SQL yang diperlukan untuk memperbarui database saat ini, jika ada, ke skema yang ditentukan. Meninjau skrip penyebaran adalah cara yang berguna untuk menentukan dampak penyebaran Anda pada database saat ini dan data yang dikandungnya. Misalnya, Anda mungkin ingin menentukan:

  • Apakah tabel yang ada akan dihapus, dan apakah itu akan mengakibatkan hilangnya data.
  • Apakah urutan operasi membawa risiko kehilangan data, misalnya, jika Anda memisahkan atau menggabungkan tabel.

Jika Anda senang dengan skrip penyebaran, Anda dapat mengulangi VSDBCMD dengan bendera /dd+ untuk membuat perubahan. Atau, Anda dapat mengedit skrip penyebaran untuk memenuhi kebutuhan Anda lalu menjalankannya secara manual di server database.

Mengintegrasikan Fungsionalitas "Bagaimana Jika" ke dalam File Proyek Kustom

Dalam skenario penyebaran yang lebih kompleks, Anda mungkin ingin menggunakan file proyek Microsoft Build Engine (MSBuild) kustom untuk merangkum logika build dan penyebaran Anda, seperti yang dijelaskan dalam Memahami File Proyek. Misalnya, dalam solusi sampel Contact Manager , file Publish.proj :

  • Membangun solusi.
  • Menggunakan Web Deploy untuk mengemas dan menyebarkan aplikasi ContactManager.Mvc.
  • Menggunakan Web Deploy untuk mengemas dan menyebarkan aplikasi ContactManager.Service.
  • Menyebarkan database ContactManager .

Saat Anda mengintegrasikan penyebaran beberapa paket web dan/atau database ke dalam proses satu langkah dengan cara ini, Anda mungkin juga menginginkan opsi untuk melakukan seluruh penyebaran dalam mode "bagaimana jika".

File Publish.proj menunjukkan bagaimana Anda dapat melakukan ini. Pertama, Anda perlu membuat properti untuk menyimpan nilai "bagaimana jika":

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

Dalam hal ini, Anda telah membuat properti bernama WhatIf dengan nilai default false. Pengguna dapat mengganti nilai ini dengan mengatur properti ke true dalam parameter baris perintah, seperti yang akan Anda lihat segera.

Tahap selanjutnya adalah membuat parameter perintah Web Deploy dan VSDBCMD sehingga bendera mencerminkan nilai properti WhatIf . Misalnya, target berikutnya (diambil dari file Publish.proj dan disederhanakan) menjalankan file .deploy.cmd untuk menyebarkan paket web. Secara default, perintah menyertakan sakelar /Y ("ya," atau mode pembaruan). Jika WhatIf diatur ke true, ini digantikan oleh sakelar /T (mode uji coba, atau "bagaimana jika").

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

Demikian pula, target berikutnya menggunakan utilitas VSDBCMD untuk menyebarkan database. Secara default, sakelar /dd tidak disertakan. Ini berarti bahwa VSDBCMD akan menghasilkan skrip penyebaran tetapi tidak akan menyebarkan database—dengan kata lain, skenario "bagaimana jika". Jika properti WhatIf tidak diatur ke true, sakelar /dd ditambahkan dan VSDBCMD akan menyebarkan database.

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

Anda dapat menggunakan pendekatan yang sama untuk membuat parameter semua perintah yang relevan dalam file proyek Anda. Ketika Anda ingin menjalankan penyebaran "bagaimana jika", Anda kemudian cukup memberikan nilai properti WhatIf dari baris perintah:

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

Dengan cara ini, Anda dapat menjalankan penyebaran "bagaimana jika" untuk semua komponen proyek Anda dalam satu langkah.

Kesimpulan

Topik ini menjelaskan cara menjalankan penyebaran "bagaimana jika" menggunakan Web Deploy, VSDBCMD, dan MSBuild. Penyebaran "bagaimana jika" memungkinkan Anda mengevaluasi dampak penyebaran yang diusulkan sebelum Anda benar-benar membuat perubahan apa pun pada lingkungan tujuan.

Bacaan lebih lanjut

Untuk informasi selengkapnya tentang sintaks baris perintah Web Deploy, lihat Pengaturan Operasi Penyebaran Web. Untuk panduan tentang opsi baris perintah saat Anda menggunakan file .deploy.cmd , lihat Cara: Menginstal Paket Penyebaran Menggunakan File deploy.cmd. Untuk panduan tentang sintaks baris perintah VSDBCMD, lihat Referensi Baris Perintah untuk VSDBCMD.EXE (Penyebaran dan Impor Skema).