Parametrizace balíčku
|
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.
- Nastavuje název webové aplikace v IIS
- Nastavuje cestu k windows service
- 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. ;)
Okomentováno