Configuration file transformations for specific machines

swinghouseswinghouse Posts: 120 Bronze 2
edited January 22, 2013 12:13PM in Deployment Manager
Configuration file transforms work beautifully with environments in Deployment Management, but is there any support for machine specific transforms?

The scenario I'm thinking of is this:
    Machine1 and Machine2 both belong to Environment1. One or more settings need to be unique for each machine, for instance the database connection string.

What I've been trying to do is to define the connection string transform in Web.Machine1.config and Web.Machine2.config, respectively. Alas, DM doesn't seem to pick up these. (The same transform rules in environment specific config files do get processed by DM.)

Comments

  • Is it the same project that you want to configure differently between machines?

    The web config transforms work only for Environments. You could try specifying the connection strings in a Deployment Manager variable, and using a powershell deployment script to apply a further transformation of the web.config. The variable could then be customised per machine as you need.

    Actually, it seems nicer to work this way, as then the package does not need to know what environments you want to deploy it to, meaning you can add/change environments and configuration without needing to build a new package.

    This requires a powershell script to modify the web.config as appropriate. I found an example of doing that on StackOverflow: http://stackoverflow.com/questions/1172 ... t-escaping

    I expect later we will have more flexibility in terms of deployment steps, and that Web Config Transform step might be more configurable.

    Thanks,

    Justin
    Justin Caldicott
    Developer
    Redgate Software Ltd
  • swinghouseswinghouse Posts: 120 Bronze 2
    Hi Justin,

    Yes, you assumed correctly - same project, different machines.

    I'll look closer into your suggested solution in a while. It certainly looks doable!

    Thanks for the help!

    /Mattias
  • Deployment Manager can already update certain parts of app.config and web.config files based on variable definitions. It will look for appSettings and connectionSettings whose names match deployment variable names, and replace the values with the appropriate deployment variable value, without you needing to write a Powershell script.

    For example, if your web.config had the following connection string definition (example from MSDN):
    <connectionStrings>
      <add name="NorthwindConnectionString" 
        connectionString="Data Source=serverName;Initial Catalog=Northwind;Persist Security Info=True;User ID=userName;Password=password"
        providerName="System.Data.SqlClient"  />
    </connectionStrings>
    
    And you defined a Deployment Manager variable with the name "NorthwindConnectionString" and the value "Data Source=.;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=my_very_secure_password", the connection string in the web.config would be replaced. Because this uses a normal deployment variable, you can define different values for different Environments, Machines, or even Steps within a project.

    This also works for appSettings in the app.config:
    <appSettings>
      <add key="SettingName" value="TestValue" />
    </appSettings>
    
    You can replace the value on deployment by adding a deployment variable named "SettingName" with the new value.

    (some documentation for this feature can be found here)
    Development Lead
    Redgate Software
  • swinghouseswinghouse Posts: 120 Bronze 2
    Hi Mike,

    Even though my question was specifically about the integration with .config transforms, it was good to read your succinct overview of the other options available in Deployment Manager.

    Thanks!

    /Mattias
  • swinghouseswinghouse Posts: 120 Bronze 2
    Regarding variables, I've added a feature request at http://redgate.uservoice.com/forums/176 ... in-config-
Sign In or Register to comment.