Windows Development
There are times in development where a Windows development machine is needed. This is a guide for how to get a Windows development virtual machine on Google Cloud Platform (GCP) with the same preinstalled tools as the GitLab shared Windows runners.
Why Windows in Google Cloud?
Use of Microsoft Windows operating systems on company laptops is banned under GitLab's Approved Operating Systems policy.
This can make it difficult to develop features for the Windows platforms. Using GCP will allow us to have a temporary Windows machine that can be removed once we're done with it.
Shared Windows runners
You can use the shared Windows runners in the case that you don't need a full Windows development machine. The GitLab 12.7 Release Post and Windows shared runner beta blog post both outline quite a bit of useful information.
To use the shared Windows runners add the following tags
to relevant jobs in your .gitlab-ci.yml
file:
tags:
- shared-windows
- windows
- windows-1809
A list of software preinstalled on the Windows images is available at: Preinstalled software.
GCP Windows image for development
The shared Windows GitLab runners are built with Packer.
The Infrastructure as Code repository for building the Google Cloud images is available at: GitLab Google Cloud Platform Shared Runner Images.
Build image
There is a chance that your Google Cloud group may already have an image built. Search the available images before you do the work to build your own.
Build a Google Cloud image with the above shared runners repository by doing the following:
- Install Packer (tested to work with version 1.5.1).
- Install Packer Windows Update Provisioner.
- Clone the repository https://github.com/rgl/packer-provisioner-windows-update and
cd
into the cloned directory. - Run the command
go build -o packer-provisioner-windows-update
(requiresgo
to be installed). - Verify
packer-provisioner-windows-update
is in thePATH
environment variable.
- Clone the repository https://github.com/rgl/packer-provisioner-windows-update and
- Add all required environment variables
in the
packer.json
file to your environment (perhaps usedirenv
). - Build the image by running the command:
packer build packer.json
.
How to use a Windows image in GCP
- In a web browser, go to https://console.cloud.google.com/compute/images.
- Filter images by the name you used when creating image,
windows
is likely all you need to filter by. - Click the image's name.
- Click the CREATE INSTANCE link.
- Important: Change name to what you'd like as you can't change it later.
- Optional: Change Region to be closest to you as well as any other option you'd like.
- Click Create at the bottom of the page.
- Click the name of your newly created VM Instance (optionally you can filter to find it).
- Click Set Windows password.
- Optional: Set a username or use default.
- Click Next.
- Copy and save the password as it won't be shown again.
- Click RDP down arrow.
- Click Download the RDP file.
- Open the downloaded RDP file with the Windows remote desktop app (https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-clients).
- Click Continue to accept the certificate.
- Enter the password and click Next.
You should now be remoted into a Windows machine with a command prompt.
Optional: Use GCP VM Instance as a runner
- Register the runner with a project:
gitlab-runner.exe register
. - Install the runner:
gitlab-runner.exe install
. - Start the runner:
gitlab-runner.exe start
.
For more information, see Install GitLab Runner on Windows and Registering runners.
Developer tips
Here are a few tips on GCP and Windows.
GCP cost savings
To minimise the cost of your GCP VM instance, stop it when you're not using it. If you do, you'll need to re-download the RDP file from the console as the IP address changes every time you stop and start it.
chocolatey
Chocolatey is a package manager for Windows. You can search for packages on https://chocolatey.org/.
choco install vim
Visual Studio (install / usage for full GUI)
You can install Visual Studio and run it within the Windows Remote Desktop app.
Install it by running: choco install visualstudio2019community
Start it by running: "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\devenv.exe" .
.NET 3 support
You can install .NET version 3 support with the following DISM
command:
DISM /Online /Enable-Feature /FeatureName:NetFx3 /All
cmd
tips
nix -> Windows The first tip for using the Windows command shell is to open PowerShell and use that instead.
Start PowerShell: start powershell
.
PowerShell has aliases for all of the following commands so you don't have to learn the native commands:
-
ls
--->dir
-
rm
--->del
-
rm -rf nonemptydir
--->rmdir /S nonemptydir
-
/
--->\
(path separator) -
cat
--->type
-
mv
--->move
- Redirection works the same (i.e.
>
and2>&1
) -
.\some.exe
to call a local executable - curl is available
-
..
and.
are available