DevOps Yourself:
Fast-Track Your
Windows Develop
Environment Setup

Justin James
@digitaldrummerj


Hours
Later
....






+


+
+




=
+
+


What is the package manager you speak of?

-
Multiple clicks to get anywhere
-
Deja vu - sense of installing same software
-
Aarg! should have got 64 bit version
-
Darn it, installed it to directory with a space
-
etc
-
etc
Problems Solved

Finding Applications

Finding Applications


Finding Applications


-
Use Boxstarter Chocolatey package
- choco install boxstarter
Bulk Install Packages

Installing Software

Install Chocolatey
http://chocolatey.org/

iex
(
(new-object net.webclient).DownloadString
(
'https://chocolatey.org/install.ps1'
)
)
Install Virtualbox
choco install virtualbox.extensionpack

Install Vagrant
choco install vagrant

Getting Start
With Vagrant

Boxes
portable
skeletons
for building
Virtual Machines

-
Pre-Built:
-
Everything pre-installed
-
-
Base OS Box:
-
Only OS is pre-installed
-
Install software as part of provisioning
-
2 Options for Boxes

Creating Vagrant Machine

Create VagrantFile
vagrant init [box name]

vagrant init opentable/win-8.1-enterprise-amd64-nocm

Configure VagrantFile

Vagrant.configure(2) do |config|
config.vm.box = "opentable/win-8.1-enterprise-amd64-nocm"
config.vm.hostname = "NDCTestMachine"
config.vm.boot_timeout = 600
config.vm.communicator = "winrm"
....Virtualbox Config
....Provisioning
end

Configure Virtual Box

Vagrant.configure(2) do |config|
.....
config.vm.provider "virtualbox" do |vb|
vb.gui = true
vb.memory = "8192"
vb.cpus = 2
vb.name = "Ndc Test Machine"
vb.customize ["modifyvm", :id, "--vram", "128"]
vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
end
...Provisioning
end

Configure Provisioning

Vagrant.configure(2) do |config|
.....
config.vm.provision :shell,
path: "shell/main.cmd"
config.vm.provision :shell,
path: "shell/InstallBoxStarter.bat"
config.vm.provision "file",
source: "shell/RunBoxStarterGist.bat",
destination: "desktop\\RunBoxStarterGist.bat"
end

Configure Provisioning

Vagrant.configure(2) do |config|
.....
config.vm.provision :shell,
path: "shell/main.cmd"
config.vm.provision :shell,
path: "shell/InstallBoxStarter.bat"
config.vm.provision "file",
source: "shell/RunBoxStarterGist.bat",
destination: "desktop\\RunBoxStarterGist.bat"
end

main.cmd

@powershell -NoProfile -ExecutionPolicy Bypass -File
"%systemdrive%\vagrant\shell\RemoveDefaultPrograms.ps1"
@powershell -NoProfile -ExecutionPolicy Bypass -File
"%systemdrive%\vagrant\shell\InstallChocolatey.ps1"

Configure Provisioning

config.vm.provision :shell,
path: "shell/InstallBoxStarter.bat"
Vagrant.configure(2) do |config|
.....
config.vm.provision :shell,
path: "shell/main.cmd"
config.vm.provision "file",
source: "shell/RunBoxStarterGist.bat",
destination: "desktop\\RunBoxStarterGist.bat"
end

InstallBoxStarter.bat

chocolatey feature enable -n=allowGlobalConfirmation
choco install BoxStarter
chocolatey feature disable -n=allowGlobalConfirmatio

Configure Provisioning

config.vm.provision "file",
source: "shell/RunBoxStarterGist.bat",
destination: "desktop\\RunBoxStarterGist.bat"
end
Vagrant.configure(2) do |config|
.....
config.vm.provision :shell,
path: "shell/main.cmd"
config.vm.provision :shell,
path: "shell/InstallBoxStarter.bat"

RunBoxStarterGist.bat

copy
"%systemdrive%\vagrant\shell\BoxStarterGist.txt"
"%temp%\BoxStarterGist.txt"
@powershell
-NoProfile -ExecutionPolicy Bypass
-Command "Install-BoxStarterPackage
-PackageName %temp%\\BoxstarterGist.txt"

Gist File - Windows Config

Enable-RemoteDesktop
Set-CornerNavigationOptions -EnableUsePowerShellOnWinX
Set-ExplorerOptions
-EnableShowHiddenFilesFoldersDrives
-EnableShowProtectedOSFiles
-EnableShowFileExtensions
-EnableShowFullPathInTitlebar
Set-TaskbarOptions -Size Small -Lock

Gist File - Chocolatey

chocolatey feature enable -n=allowGlobalConfirmation
choco install git
choco install nodejs
choco install visualstudiocode
choco install GoogleChrome
.....
chocolatey feature disable -n=allowGlobalConfirmation

Gist File - Npm/Taskbar

Install-ChocolateyPinnedTaskBarItem
"${env:UserProfile}\Desktop\code.lnk"
Install-ChocolateyPinnedTaskBarItem
"${env:ProgramFiles(x86)}\Google\Chrome\Application\chrome.exe"

Gist File - Npm/Taskbar

npm config set loglevel http
npm config set spin false
npm install -g ionic
npm install -g cordova

Gist File - Code Config

$vsCodeDir = "${env:appdata}\Code"
If ((Test-Path $vsCodeDir)) {
cp "${env:temp}\VisualStudioCode_keybinding.json"
"$vsCodeDir\keybinding.json"
cp "${env:temp}\VisualStudioCode_UserSettings.json"
"$vsCodeDir\usersettings.json"
}
else {
Write-Host "Error: Visual Studio Code Directory, $vsCodeDir is missing"
}

Gist File - Git Clone

$projectDir = "${env:systemdrive}\projects"
If (!(Test-Path $projectDir)) {
New-Item -Path $projectDir -ItemType Directory
}
cd $projectDir
git clone ....

Control Virtual Machine
Useful Vagrant Commands

Start Up Box

vagrant up
Login into Box

vagrant rdp
vagrant reload

Need to Reboot?
vagrant halt

Need to Shutdown?
vagrant suspend
Need to Hibernate?

vagrant destroy
Done with Project?

vagrant up

Need to Box Again?
Build & Share
Your Own Box

Easiest way
build out machine
then
package it

Packaging VirtualBox Machine

Setup Windows Remote Management (WinRM)
http://tinyurl.com/winrmconfig
vagrant package --base NAME --output NAME
Adding Box

vagrant box add [NAME]
Wrap up


-
Install Chocolatey
-
Install Virtualbox
-
Install Vagrant
-
Install Git
-
Clone github repo with Vagrant File
-
Vagrant Up
New Initial Instructions

-
Clone github repo with Vagrant File
-
Vagrant Up
New Create Instructions

-
Azure
-
Modern.IE
-
Replicate production environments
-
Any Windows or Linux OS
Other uses for Vagrant
Resources
VirtualBox - http://www.virtualbox.org
Vagrant Website - http://www.vagrantup.com
Vagrant Boxes - https://atlas.hashicorp.com/boxes/search
Chocolatey - https://chocolatey.org/
BoxStarter - https://boxstarter.org/



thank you
i'm Justin.
@digitaldrummerj - digitaldrummerj@gmail.com
http://digitaldrummerj.me
1 480 360 4335

DevOps Yourself: Fast Track Your Windows Dev Box Setup
By Justin James
DevOps Yourself: Fast Track Your Windows Dev Box Setup
Learn how to get rid of the it works on my machine. Toss the setup manual out the window and learn how to create reproducible setups.
- 5,532