We are trying to deploy a website to a live location. This is done to a custom install directory,
As shown below we purge the directory before we deploy, and skip some directories. This works fine after the first deployment Octopus does.
However when Octopus deploys for the first time to a given environment, it purges the whole directory, including the directories/files that we excluded.
That doesn’t look like correct behaviour as when we review the code for the purge directory option we don’t appear have a special flag for first run instances. So that we can try and work out what may be happening are you able to export and attach the raw logs for the deployment where this occurred?
I tested on the version that I currently have installed (2018.5.1) and it didn’t exhibit the same issue.
I have attached the raw server task log. The given build failed due to something on our end (another problem we are trying to solve involving certificates and bindings). Note that for some reason the release was not rolled back. maybe because it was impossible at this point, or some setting I missed.
We will also look into this ourselves, maybe one of our variables was wrongly configured and octopus did exactly what we asked it to do.
Everything looks OK from a log point of view, I’m seeing exactly what I expect to see:
9:41:53 Info | Purging the directory 'C:\****\****'
19:41:53 Info | Leaving files and directories that match any of: 'App_Data\*, Media\*, Downloads\*'
19:42:09 Info | Copying package contents to 'C:\****\****'
19:42:09 Info | Copied 3106 files
Is it possible for you to try and replicate the issue with another release (if you have a test environment that you can check against).
That is IIS reporting that you have multiple sites bound to the same port, more information on how to resolve that can be found here.
I hope that helps, please let me know if there is anything else we can assist with, and please let me know if you are able to replicate your initial issue,
Alas we were not able to replicate the issue, but we found what might have been part of the problem.
Turns out we were excluding the wrong directory.
I have one question that might shed some light on the problem. Is there a functional difference between excluding <directory>\* and <directory>\ ?
It might be a good idea to include an option to make a backup prior to purging, or to add what files are being deleted to the raw log so that we can see if something happens that shouldn’t and fix it.
That’s good to hear, unfortunate that the wrong directory was excluded.
I have passed on to the team your suggestions around backups (unlikely) and logging deleted files (more likely), so keep an eye out for those in future. As for <directory>\* and <directory> we had a look at the code and they should be functionally the same, we can’t identify any differences at this point. Below is the code we use when using <directory>\*:
private IEnumerable<FileSystemInfo> EnumerateWithGlob(string parentDirectoryPath, params string[] globPattern)
{
var results = globPattern.Length == 0
? Glob.Expand(Path.Combine(parentDirectoryPath, "*"))
: globPattern.SelectMany(pattern => Glob.Expand(Path.Combine(parentDirectoryPath, pattern)));
return results
.GroupBy(fi => fi.FullName) // use groupby + first to do .Distinct using fullname
.Select(g => g.First());
}
Please let me know if there is anything else that I can assist with,