Red Gate forums :: View topic - Get rid of web.*.config files after deployment
Return to www.red-gate.com RSS Feed Available

Search  | Usergroups |  Profile |  Messages |  Log in  Register 
Go to product documentation

Deployment Manager PowerShell Scripts forum

Get rid of web.*.config files after deployment

Search in Deployment Manager PowerShell Scripts forum
Post new topic   Reply to topic
Jump to:  
Author Message
rborges



Joined: 04 Mar 2014
Posts: 2

PostPosted: Tue Mar 04, 2014 10:42 pm    Post subject: Get rid of web.*.config files after deployment Reply with quote

In addition to getting rid of web.*.config files we also keep our actual appSettings and connectionStrings values in a Config directory

Environments:

  • Dev
  • QA
  • QC
  • We do not currently have a Prod environment due to firewall requirements, but do maintain Prod configs

Config files example

  • Confg\Dev\appSettings.config
  • Config\QA\connectionStrings.config

We only want to keep the config files for the current environment, delete the rest, and delete the web.*.config files

Special requirement: when deploying to QC, we want to keep our Prod configs to help makes our production deployments a little easier.


Code:

<#
   This is the post deployment script that will run after
   Red Gate Deployment Manager completes a deployment
   to one of the servers

   Expected Red Gate Variables:
      $RedGateEnvironmentName - should be either null, Dev, QA, QC

   This script should be placed at the root of every web site or web application that
   will be deployed using Deployment Manager

   This script will remove the web.*.config files and
   will delete the Configuration/* directories that don't apply to the current environment

   Example config files, if the current environment is QA:
      Web.config -> this file gets transformed
      Web.Debug.config -> will be deleted
      Web.Dev.config -> will be deleted
      Web.QA.config -> Deployment Manager will run this transform after the release config, this file will be deleted
      Web.QC.config -> will be deleted
      Web.Prod.config -> will be deleted
      Web.Release.config -> Deployment Manager always runs this file's transformations first

   Example config directories, if the current environment is QA:
      Configurations/Debug -> will be deleted
      Configurations/Dev -> will be deleted
      Configurations/QA -> will NOT be deleted
      Configurations/QC -> will be deleted
      Configurations/Prod -> will be deleted. If the current environment is QC, then this will not be deleted in order to aid with the deployment process
#>

# log file
$stream = [System.IO.StreamWriter] "PostDeployLog.log"

# name of, coming from Deployment Manager
$environmentName = $RedGateEnvironmentName

# path that the script is running in
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition

if(!$environmentName)
{
   $stream.WriteLine("Environment not found. Will do nothing")
}
else
{
   $stream.WriteLine("Environment is " + $environmentName)
   
   # delete config transform files
   $webConfigs = Get-ChildItem web.*.config
   foreach($file in $webConfigs)
   {
      $stream.WriteLine("Removing file: " + $file)
      Remove-Item $file.Name
      $stream.WriteLine("File removed: " + $file)
      $stream.WriteLine("")
   }
   # end delete config transform files

   # Delete config directories
   [System.IO.DirectoryInfo]$directInf = New-Object IO.DirectoryInfo($scriptPath + "\Configurations")
   $folders = $directInf.GetDirectories()
   
   $stream.WriteLine("")
   $stream.WriteLine("Deleting unnecessary folders in the Configurations directory")   

   foreach($directory in $folders)
   {
      $stream.WriteLine("Current directory is: " + $directory.Name)

      <#
         This is a mild attempt to reduce cyclomatic complexity
         if the current environment is QC and current directory is QC
            dont delete
         if the current environment is QC and the current directory is Prod
            dont delete
         if the current environment is QC and is any other directory
            delete
         if the current environment is not QC and the folder is the same as the environment
            dont delete
         if the current environment is not QC and the folder is not the same as the environment
            delete
      #>

      $isQcEnvironment = [string]::Compare($environmentName, "QC", $True)
      $currentDirectoryIsQc = [string]::Compare($directory.Name, "QC", $True)
      $currentDirectoryIsProd = [string]::Compare($directory.Name, "Prod", $True)
      $isFolderSameAsEnvironment = [string]::Compare($directory.Name, $environmentName, $True)

      if ($isQcEnvironment -eq 0 -and $currentDirectoryIsQc -eq 0)
      {
         $stream.WriteLine("Don't delete QC folder")
      }
      elseif($isQcEnvironment -eq 0 -and $currentDirectoryIsProd -eq 0)
      {
         $stream.WriteLine("Don't delete Prod folder")
      }
      elseif($isQcEnvironment -eq 0)
      {
         $stream.WriteLine("Delete " + $directory.Name + " folder")
         $removalName = $directory.FullName
         $stream.WriteLine($removalName)
         Remove-Item $removalName  -recurse
      }
      elseif($isQcEnvironment -ne 0 -and $isFolderSameAsEnvironment -eq 0)
      {
         $stream.WriteLine("Don't delete " + $directory.Name + " folder")
      }
      elseif($isQcEnvironment -ne 0 -and $isFolderSameAsEnvironment -ne 0)
      {
         $stream.WriteLine("Delete " + $directory.Name + " folder")
         $removalName = $directory.FullName
         $stream.WriteLine($removalName)
         Remove-Item $removalName  -recurse
      }
      $stream.WriteLine("")
   }
   # end Delete config directories
}
   
$stream.close()


Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic All times are GMT + 1 Hour
Page 1 of 1

 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group