Transcript
Page 1: Autodeploy när man inte kommer åt miljöerna

Automatisera deployer på oåtkomliga servrar

Robin Helly, .NET-utvecklare

Page 2: Autodeploy när man inte kommer åt miljöerna
Page 3: Autodeploy när man inte kommer åt miljöerna
Page 4: Autodeploy när man inte kommer åt miljöerna
Page 5: Autodeploy när man inte kommer åt miljöerna

Shake ’n bake

Page 6: Autodeploy när man inte kommer åt miljöerna
Page 7: Autodeploy när man inte kommer åt miljöerna

Automatisera deployer på oåtkomliga servrar

Eller när shake ’n bake minskade kostnaderna för projektet

Robin Helly, .NET-utvecklare

Page 8: Autodeploy när man inte kommer åt miljöerna
Page 9: Autodeploy när man inte kommer åt miljöerna

Driftsättning

•Molnet

• Egna fysiska servrar

•Dedikerade servrar hos driftsleverantör

•Manuell deploy och autodeploy

Page 10: Autodeploy när man inte kommer åt miljöerna

Manuell deploy hos extern driftsleverantör

• Tidskrävande för flera parter

•Driftsättarna känner inte till koden och utvecklarna känner inte till miljön

•Mänsklig faktor

•Deployerna kan skilja sig från gång till gång

Page 11: Autodeploy när man inte kommer åt miljöerna
Page 12: Autodeploy när man inte kommer åt miljöerna

Deploy-script

•PowerShell script

•Backup och ny deploy av siten

•Körs hos och av driftsleverantören

Page 13: Autodeploy när man inte kommer åt miljöerna
Page 14: Autodeploy när man inte kommer åt miljöerna

Att göra en deploy

• .NET Site

•Visual studios ’publish’-funktion (Method: File system)

•Komprimera innehållet till en .zip-fil

• Flytta .zip-filen till samma plats som deploy-scriptet

•Kör scriptet

Page 15: Autodeploy när man inte kommer åt miljöerna

Hitta siten och stoppa den

Page 16: Autodeploy när man inte kommer åt miljöerna

Hitta siten och stoppa den

$website = Read-Host "Specify the name of the website"if((Test-Path "IIS:\Sites\$website") -and (Test-Path (Get-WebSite -name $website).physicalPath)){

$filePath = (Get-WebSite -name $website).physicalPath

Stop-WebSite $website

DeploySite $filePath

Start-WebSite $website

}

else {

Write-Host "The website does not exist (check that the spelling is correct)"

}

}

Page 17: Autodeploy när man inte kommer åt miljöerna

Hitta siten och stoppa den

$website = Read-Host "Specify the name of the website"if((Test-Path "IIS:\Sites\$website")

-and (Test-Path (Get-WebSite -name $website).physicalPath)){}else {

Write-Host "The website does not exist"} $filePath = (Get-WebSite -name $website).physicalPath

Stop-WebSite $website

DeploySite $filePath

Start-WebSite $website

}

Page 18: Autodeploy när man inte kommer åt miljöerna

Hitta siten och stoppa den

$website = Read-Host "Specify the name of the website"if((Test-Path "IIS:\Sites\$website")

-and (Test-Path (Get-WebSite -name $website).physicalPath)){}else {

Write-Host "The website does not exist"} $filePath = (Get-WebSite -name $website).physicalPath

Stop-WebSite $website

DeploySite $filePath

Start-WebSite $website

}

Page 19: Autodeploy när man inte kommer åt miljöerna

Hitta siten och stoppa den

$website = Read-Host "Specify the name of the website"if((Test-Path "IIS:\Sites\$website")

-and (Test-Path (Get-WebSite -name $website).physicalPath)){}else {

Write-Host "The website does not exist"} $filePath = (Get-WebSite -name $website).physicalPath

Stop-WebSite $website

DeploySite $filePath

Start-WebSite $website

}

Page 20: Autodeploy när man inte kommer åt miljöerna

Hitta siten och stoppa den

function SetUp(){

$website = Read-Host "Specify the name of the website"

if((Test-Path "IIS:\Sites\$website")

-and (Test-Path (Get-WebSite -name $website).physicalPath)){

$filePath = (Get-WebSite -name $website).physicalPath

}

}

Page 21: Autodeploy när man inte kommer åt miljöerna

Hitta siten och stoppa den

if(…){

$filePath = (Get-WebSite -name $website).physicalPath

Stop-WebSite $website

DeploySite $filePath

Start-WebSite $website

}

Page 22: Autodeploy när man inte kommer åt miljöerna

Hitta siten och stoppa den

if(…){

$filePath = (Get-WebSite -name $website).physicalPath

Stop-WebSite $website

DeploySite $filePath

Start-WebSite $website

}

Page 23: Autodeploy när man inte kommer åt miljöerna

Gör en deploy av paketet

function DeploySite($filePath){

BackUpSite $filePath

DeleteFolder $filePath

UnZip $filePath

CreateStatusFile $filePath

}

Page 24: Autodeploy när man inte kommer åt miljöerna

Gör en deploy av paketet

function DeploySite($filePath){

BackUpSite $filePath

DeleteFolder $filePath

UnZip $filePath

CreateStatusFile $filePath

}

Page 25: Autodeploy när man inte kommer åt miljöerna

Gör en deploy av paketet

function DeploySite($filePath){

BackUpSite $filePath

DeleteFolder $filePath

UnZip $filePath

CreateStatusFile $filePath

}

Page 26: Autodeploy när man inte kommer åt miljöerna

Gör en deploy av paketet

function DeploySite($filePath){

BackUpSite $filePath

DeleteFolder $filePath

UnZip $filePath

CreateStatusFile $filePath

}

Page 27: Autodeploy när man inte kommer åt miljöerna

Gör en deploy av paketet

function DeploySite($filePath){

BackUpSite $filePath

DeleteFolder $filePath

UnZip $filePath

CreateStatusFile $filePath

}

Page 28: Autodeploy när man inte kommer åt miljöerna

Gör en backup av siten

Page 29: Autodeploy när man inte kommer åt miljöerna

Gör en backup av sitenfunction BackUpSite($filePath){

$backupLocation = "$(get-location)\Backup\Site-backup"

[string]$pathToZipExe = "$(get-location)\7-Zip\7z.exe";

[Array]$arguments = "A", "-tzip", "$backupLocation.zip", $filePath;

& $pathToZipExe $arguments;

Move-Item $filePath\Logs $(get-location)

}

Page 30: Autodeploy när man inte kommer åt miljöerna

Gör en backup av sitenfunction BackUpSite($filePath){

$backupLocation = "$(get-location)\Backup\Site-backup"

[string]$pathToZipExe = "$(get-location)\7-Zip\7z.exe";

[Array]$arguments = "A", "-tzip", "$backupLocation.zip", $filePath;

& $pathToZipExe $arguments;

Move-Item $filePath\Logs $(get-location)

}

Page 31: Autodeploy när man inte kommer åt miljöerna

Gör en backup av sitenfunction BackUpSite($filePath){

$backupLocation = "$(get-location)\Backup\Site-backup"

[string]$pathToZipExe = "$(get-location)\7-Zip\7z.exe";

[Array]$arguments = "A", "-tzip", "$backupLocation.zip", $filePath;

& $pathToZipExe $arguments;

Move-Item $filePath\Logs $(get-location)

}

Page 32: Autodeploy när man inte kommer åt miljöerna

Gör en backup av sitenfunction BackUpSite($filePath){

$backupLocation = "$(get-location)\Backup\Site-backup"

[string]$pathToZipExe = "$(get-location)\7-Zip\7z.exe";

[Array]$arguments = "A", "-tzip", "$backupLocation.zip", $filePath;

& $pathToZipExe $arguments;

Move-Item $filePath\Logs $(get-location)

}

Page 33: Autodeploy när man inte kommer åt miljöerna

Gör en backup av siten

function BackUpSite($filePath){

$backupLocation = "$(get-location)\Backup\Site-backup"

[string]$pathToZipExe = "$(get-location)\7-Zip\7z.exe";

[Array]$arguments = "A", "-tzip", "$backupLocation.zip", $filePath;

& $pathToZipExe $arguments; ath\Logs $(get-location)

}

Page 34: Autodeploy när man inte kommer åt miljöerna

Gör en backup av siten

function BackUpSite($filePath){

$backupLocation = "$(get-location)\Backup\Site-backup"

[string]$pathToZipExe = "$(get-location)\7-Zip\7z.exe";

[Array]$arguments = "A", "-tzip", "$backupLocation.zip", $filePath;

& $pathToZipExe $arguments; $filePath\Logs $(get-location)

}

Page 35: Autodeploy när man inte kommer åt miljöerna

Ta bort den gamla sitenfunction DeleteFolder($filePath){

Remove-Item "$filePath\*" -Force -Recurse

}

Page 36: Autodeploy när man inte kommer åt miljöerna

Ta bort den gamla siten

function DeleteFolder($filePath){

Remove-Item "$filePath\*" -Force -Recurse

}

Page 37: Autodeploy när man inte kommer åt miljöerna

Ta bort den gamla siten

function DeleteFolder($filePath){

Remove-Item "$filePath\*" -Force -Recurse

}

Page 38: Autodeploy när man inte kommer åt miljöerna

Ta bort den gamla siten

function DeleteFolder($filePath){

Remove-Item "$filePath\*" -Force -Recurse

}

Page 39: Autodeploy när man inte kommer åt miljöerna

Deploy av den nya siten

Page 40: Autodeploy när man inte kommer åt miljöerna

Deploy av den nya siten

function UnZip($destination){

$shell = new-object -com shell.application

$zip = $shell.NameSpace("$(get-location)\deploy.zip")

foreach($item in $zip.items())

{

$shell.Namespace($destination).copyhere($item)

}

}

Page 41: Autodeploy när man inte kommer åt miljöerna

Deploy av den nya siten

function UnZip($destination){

$shell = new-object -com shell.application

$zip = $shell.NameSpace("$(get-location)\deploy.zip")

foreach($item in $zip.items())

{

$shell.Namespace($destination).copyhere($item)

}

}

Page 42: Autodeploy när man inte kommer åt miljöerna

Deploy av den nya siten

function UnZip($destination){

$shell = new-object -com shell.application

$zip = $shell.NameSpace("$(get-location)\deploy.zip")

foreach($item in $zip.items())

{

$shell.Namespace($destination).copyhere($item)

}

}

Page 43: Autodeploy när man inte kommer åt miljöerna
Page 44: Autodeploy när man inte kommer åt miljöerna

Tidsstämpel på deployfunction CreateStatusFile($filePath){

New-Item $filePath\status.html -type file -force -value (Get-Date -Format "yyyy-MM-dd HH:mm:ss")

}

Page 45: Autodeploy när man inte kommer åt miljöerna

Tidsstämpel på deploy

function CreateStatusFile($filePath){

New-Item $filePath\status.html -type file -force

-value (Get-Date -Format "yyyy-MM-dd HH:mm:ss")

}

Page 46: Autodeploy när man inte kommer åt miljöerna

Tidsstämpel på deploy

function CreateStatusFile($filePath){

New-Item $filePath\status.html -type file -force

-value (Get-Date -Format "yyyy-MM-dd HH:mm:ss")

}

Page 47: Autodeploy när man inte kommer åt miljöerna

Tidsstämpel på deploy

function CreateStatusFile($filePath){

New-Item $filePath\status.html -type file -force

-value (Get-Date -Format "yyyy-MM-dd HH:mm:ss")

}

Page 48: Autodeploy när man inte kommer åt miljöerna

Demo

Page 49: Autodeploy när man inte kommer åt miljöerna
Page 50: Autodeploy när man inte kommer åt miljöerna

Varför underlättar scriptet?

Page 51: Autodeploy när man inte kommer åt miljöerna

Varför underlättar scriptet?

• Tidsinsparning

Page 52: Autodeploy när man inte kommer åt miljöerna

Varför underlättar scriptet?

• Tidsinsparning

•Garantera att deployen sker på samma sätt varje gång

Page 53: Autodeploy när man inte kommer åt miljöerna

Varför underlättar scriptet?

• Tidsinsparning

•Garantera att deployen sker på samma sätt varje gång

• Större kontroll över att få deployen som det var tänkt

Page 54: Autodeploy när man inte kommer åt miljöerna

Varför underlättar scriptet?

• Tidsinsparning

•Garantera att deployen sker på samma sätt varje gång

• Större kontroll över att få deployen som det var tänkt

•Minimera problem och konflikter

Page 55: Autodeploy när man inte kommer åt miljöerna

Varför underlättar scriptet?

• Tidsinsparning

•Garantera att deployen sker på samma sätt varje gång

• Större kontroll över att få deployen som det var tänkt

•Minimera problem och konflikter

•Hur gör ni med era deployer på externa servrar?

Page 56: Autodeploy när man inte kommer åt miljöerna

Deploy-paket

Page 57: Autodeploy när man inte kommer åt miljöerna

Deploy-paket Deploy-script

+

Page 58: Autodeploy när man inte kommer åt miljöerna

Deploy-paket Deploy-script

+Uppdaterad site

=

Page 59: Autodeploy när man inte kommer åt miljöerna

Tack för att ni lyssnade


Recommended