Last active
October 14, 2021 02:59
-
-
Save CJHarmath/b2af0f50700ce9fbdd8c5c3e582fd41b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Setup | |
Import-Module WebAdministration | |
# create 2 site root directories | |
$a = 'C:\inetpub\AspNetCoreSampleA' | |
$b = 'C:\inetpub\AspNetCoreSampleB' | |
$siteRoot = 'C:\inetpub\aspnetcoresample' | |
$siteName = 'AspNetCoreSample' | |
$poolName = "aspnetcore" | |
New-Item -Type Directory $a | |
New-Item -Type Directory $b | |
# create a symlink to targeting one side | |
New-Item -Type SymbolicLink -Path $siteRoot -Target $a | |
# point the site root to the symlink | |
Set-ItemProperty "IIS:\Sites\$siteName" -name physicalPath -value $siteRoot | |
# make sure it get's picked up | |
Restart-WebAppPool -Name $poolName | |
# this tells you the active side | |
Get-Item -Path $siteRoot | Select-Object -ExpandProperty target | |
# Flip the symlink | |
$current = (Get-Item -Path $siteRoot).Target | |
$newTarget = if ($current -eq $a) {$b} else {$a} | |
New-Item -Type SymbolicLink -Path $siteRoot -Target $newTarget -Force | |
# at this point w3wp.exe still locks the current target folder until it's getting recycled | |
# Deploy new version to the symlink which is now pointing to the other side which should have no locks | |
robocopy \\myshare\myapp $siteRoot /mir | |
# recycle app pool, so it picks up the new files | |
Restart-WebAppPool -Name $poolName | |
# bonus point: rollback is easy | |
$current = (Get-Item -Path $siteRoot).Target | |
$newTarget = if ($current -eq $a) {$b} else {$a} | |
New-Item -Type SymbolicLink -Path $siteRoot -Target $newTarget -Force | |
Restart-WebAppPool -Name $poolName |
Sure thing, glad it helped someone!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for the script, (and for the comment on the GH issue at MS repo) used it as an inspiration for our deploy script! I owe you.
PS. we used to switch IIS application path during deploys, but symlinks are so much better and in-flight requests are not being dropped. Thanks again. ❤ 🙌