Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Parametrizace balíčku

| Moje práce

Balíček je připravený k nasazení, ale je potřeba ho ještě nakonfigurovat. Jedna možnost je projít ručně konfigurační soubory na file systému… Počkat, kam se to vlastně nahrálo!?

Pokud vezmete balíček tak, jak byl, a nainstalujete ho přes IIS manager, dostanete možnost vyplnit pár vydedukovaných parametrů:

Tak jako dobrý, ale je tam spousta duplicit a co je to Parameter 1? Moc uživatelsky příjemné to teda není. Navíc, když to potvrdíme a pokračujeme dál, tak to spadne na instalaci windows služby. Proč? Protože ve scriptu je jiná cesta ke službě než kam se ve výsledku nakopírovala. Problémy, jen samé problémy. Naštěstí jdou snadno vyřešit.

Parameters.xml

MS Deploy naštěstí umí definovat a následně i nastavovat parametry. Můžeme to udělat buď pomocí parametrů z příkazové řádky nebo pomocí XML souboru s definicí parametrů. Já zvolil druhou variantu:

<parameters>
  <parameter tags='IisApp' defaultValue='MultiConnector\$instance' name='IIS Web Application Name'>
    <parameterEntry kind='ProviderPath' scope='IisApp'
      match='^$($webSource.Replace(`"\`", `"\\`").Replace(`".`", `"\.`"))$'/>
    <parameterEntry kind='ProviderPath' scope='setAcl'
      match='^$($webSource.Replace(`"\`", `"\\`").Replace(`".`", `"\.`"))$'/>
  </parameter>
  <parameter tags='WinSvc' defaultValue='$destPath\$instance' name='Windows service path'>
    <parameterEntry kind='ProviderPath' scope='dirPath'
      match='^$($winSource.Replace(`"\`", `"\\`").Replace(`".`", `"\.`"))$'/>
    <parameterEntry kind='TextFile' scope='Presync\.cmd$'
      match='$($destPath.Replace(`"\`", `"\\`").Replace(`".`", `"\.`"))\\$instance'/>
    <parameterEntry kind='TextFile' scope='Postsync\.cmd$'
      match='$($destPath.Replace(`"\`", `"\\`").Replace(`".`", `"\.`"))\\$instance'/>
  </parameter>
  <parameter tags='SqlConnectionString' defaultValue='$connString' name='Connection String'
      description='MultiConnector Connection String used in web.config by the application to access the database.'>
    <parameterEntry kind='XmlFile' scope='Web\.config$'
      match='//connectionStrings/add[@name=`"MultiConnector`"]/@connectionString'/>
    <parameterEntry kind='XmlFile' scope='Svc\.exe\.config$'
      match='//connectionStrings/add[@name=`"MultiConnector`"]/@connectionString'/>
    <parameterEntry kind='ProviderPath' scope='dbDacFx'
      match='^$($dbSource.Replace(`"\`", `"\\`").Replace(`".`", `"\.`"))$'/>
  </parameter>
</parameters>

V UI jsou definována políčka pro tři parametry.

  1. Nastavuje název webové aplikace v IIS
  2. Nastavuje cestu k windows service
  3. Nastavuje connection string aplikace

Tyto parametry jsou použity na několika místech (zbavili jsem se duplicit v UI). Například cesta k windows service se aktualizuje i ve vygenerovaných cmd souborech a tak se nám úspěšně nainstaluje windows služba i když změníme cestu k ní. Connection string určuje, kam se nadeployuje DB a aktualizuje se jak ve webové aplikaci, tak ve windows službě.

Při volání MsDeploy pro tvorbu balíčku z manifextu, přidáme následující parametr a máme vystaráno:

-declareParamFile:$paramFile

A výsledek vypadá nějak tak:

A máme uživatelsky přívětivý balíček, který nasadí databázi, web i windows službu, která se nainstaluje a rovnou i spustí. Life's good, dokonce i pro deployment specialisty. ;)

Našli jste v článku chybu? Máte námět na reportáž? Založte mi ticket.