Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
param([string] $Version, [string] $StorageAccount, [string] $StorageUser, [string] $StoragePassword)
$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest;
New-Item -ItemType Directory -Force -Path C:\Temp
function Log($Message)
{
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss,fff"
$newLine = [System.Environment]::NewLine
$logEntry = "$timestamp $Message $newLine"
Write-Host $logEntry
Add-Content -Path "C:\Temp\Log.txt" -Value $logEntry
}
$installerName = "Octopus.$Version.msi"
$serverDownloadPath = "https://octopus-testing.s3.amazonaws.com/server/Octopus.$Version-x64.msi"
function Download-File
{
param (
[string]$url,
[string]$saveAs
)
Log "Downloading $url to $saveAs"
$downloader = new-object System.Net.WebClient
$downloader.DownloadFile($url, $saveAs)
}
function Install-Server
{
Log "Beginning Octopus Server installation"
$pathspec = "$env:SystemDrive\\OctopusTest"
if(Test-Path -path $pathspec)
{
Remove-Item $pathspec -recurse -force
}
$serverDownloadSavePath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\\$installerName")
if ((test-path $serverDownloadSavePath) -ne $true)
{
Log "Downloading latest Octopus Server MSI from '$serverDownloadPath' to '$serverDownloadSavePath'..."
Download-File $serverDownloadPath $serverDownloadSavePath
}
else
{
Log "Skipping download of latest Octopus Server MSI as '$serverDownloadSavePath' already exists"
}
Log "Installing MSI"
$msiExitCode = (Start-Process -FilePath "msiexec.exe" -ArgumentList "/i $installerName /quiet /l*v C:\\ServerMsiInstallation.log" -Wait -Passthru).ExitCode
Log "Octopus Server MSI installer returned exit code $msiExitCode"
Log "Removing msi from '$serverDownloadSavePath'"
Remove-Item -Path $serverDownloadSavePath -Force
}
function Setup-VM
{
& netsh.exe firewall add portopening TCP 80 "Octopus Server"
& netsh.exe firewall add portopening TCP 443 "Octopus Server"
& netsh.exe firewall add rule name="Tentacles" dir=in action=allow protocol=TCP localport=10000-15000
$serverDownloadSavePath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\\PSTools.zip")
if ((test-path $serverDownloadSavePath) -ne $true)
{
Log "Downloading tools 'https://download.sysinternals.com/files/PSTools.zip' to '$serverDownloadSavePath'..."
Download-File -url "https://download.sysinternals.com/files/PSTools.zip" -saveAs $serverDownloadSavePath
$folder = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\\PSTools")
Expand-Archive $serverDownloadSavePath -DestinationPath $folder
}
else
{
Log "Skipping downloading tools '$serverDownloadSavePath' already exists"
}
& .\PsTools\PsExec64.exe -accepteula -s cmdkey /add:$StorageAccount /user:$StorageUser /pass:$StoragePassword
}
Log "Octopus is not installed. Installing $Version"
Setup-VM
Install-Server
Log "Server deployment finished"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.