2015-08-17 7 views
5

Ho un server CI (Bamboo, ma non penso che sia importante) creare e distribuire automaticamente la mia applicazione. Durante lo sviluppo locale che uso LocalDB (<connectionStrings> nodo nel mio web.config)Modo corretto per impostare stringhe di connessione in ci durante msbuild/deploy

<add name="MyApp" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDB)\v11.0;Integrated Security=True;Connect Timeout=30;Initial Catalog=MyApp" /> 
    <add name="MyApp_Patients" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDB)\v11.0;Integrated Security=True;Connect Timeout=30;Initial Catalog=AppleHms_MyApp" /> 
    ... 

Se distribuito, ovviamente, non deve utilizzare questo. Dovrebbe utilizzare la stringa di connessione del server SQL di distribuzione.

So che posso scrivere una trasformazione web.config per questo e so anche che posso crittografare il web.config ma non sono sicuro di come la stringa di connessione db debba entrare correttamente. Ciò che rende senso per me è per il server CI per sovrascrivere ogni connectionString - quindi il mio config trasformare dovrebbe forse essere simile a questo

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
    <add name="MyApp" providerName="System.Data.SqlClient" connectionString="${main-db-connectionstring}" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 
    <add name="MyApp_Patients" providerName="System.Data.SqlClient" connectionString="${patients-db-connectionstring}" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 
    ... 
    </connectionStrings> 
    <system.web> 
    <compilation xdt:Transform="RemoveAttributes(debug)" /> 
    </system.web> 
</configuration> 

Con le sostituzioni provenienti dalle variabili nel mio server CI (presumibilmente una parte di msbuild o distribuire)?

È corretto che questo sia il modo "giusto" per farlo? Che cosa devo fare esattamente con msbuild/deploy per farlo accadere?

risposta

2

Utilizzando il compito XMLPoke sarebbe il modo corretto per farlo tramite script MSBuild

XMLPoke on MSDN

anche per ottenere davvero un buon riferimento, controllare Sayed Ibrahim Hashimi blog, sempre disponibile

+0

Grazie - puoi dare un esempio di come apparirebbe il comando msdeploy o msbuild? Come dovrei passare un valore dalla riga di comando? La mia lettura della (quasi inutile) documentazione e il (molto più utile) blog collegato è che dovrebbe essere memorizzato nel csproj? –

6

Inoltre stiamo usando bambù per CI e distribuzione, e cosa stiamo facendo è:

  • Progetto di pacchetti contenente un Parameters.xml predefinito come t msdeploy file di dichiarazione dei parametri.
  • Manutenzione di file SetParameters.xml per i nostri vari ambienti.
  • Progetti di imballaggio su edificio notturno.
  • Rilascio di pacchetti notturni come artefatti di bambù.
  • Utilizzo di msdeploy per applicare la parametrizzazione su questi pacchetti durante la distribuzione per una particolare build notturna.

In sostanza il dispiegamento quanto riguarda msdeploy è come come segue:

msdeploy 
    -verb:sync 
    -source:package="NightlyPackage.zip" 
    -dest:iisApp="YourIISHost/YourIISSite" 
    -declareParamFile="YourEnvironementSetParameters.xml" 

tuo Parameters.xml per pacchetto progetto sarebbe simile come segue:

<parameters> 
    <parameter 
     name="ConnectionString1-Web.config Connection String" 
     description="" 
     defaultValue="localhost"> 
      <parameterEntry 
      kind="XmlFile" 
      scope="\\web.config$" 
      match="/configuration/connectionStrings/add[@name='ConnectionString1']/@connectionString" 
      /> 
    </parameter> 
</parameters> 

Dove ConnectionString1 è il nome di una connectionString.

E il tuo YourEnvironementSetParameters.xml sarà simile come segue:

<parameters> 
    <setParameter name="ConnectionString1-Web.config Connection String" value="Your parametrized connection string value " /> 
</parameters> 

ci sono convenzioni quando si utilizza parametrizzazione su alcuni campi con webdeploy. Le stringhe di connessione sono interessate, quindi è buona norma rispettare la seguente denominazione dei parametri quando si tratta di fare riferimento al web.stringhe di connessione config:

%NameOfYourConnectionStringAsInWebConfig%-Web.config Connection String 
+0

Grazie Koresh! Se i parametri stanno uscendo da un file, allora stai controllando un file con password nel controllo del codice sorgente vero? –

+0

No, utilizziamo le stringhe di connessione SSPI. –

+0

Grazie per l'accuratezza di questa risposta, in particolare il pezzo sulle convenzioni, di cui non ero a conoscenza. Passare a quelle convenzioni ha risolto un problema di distribuzione che mi stava facendo impazzire! – SeanKilleen

Problemi correlati