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:

  1. Install Packer (tested to work with version 1.5.1).
  2. Install Packer Windows Update Provisioner.
    1. Clone the repository https://github.com/rgl/packer-provisioner-windows-update and cd into the cloned directory.
    2. Run the command go build -o packer-provisioner-windows-update (requires go to be installed).
    3. Verify packer-provisioner-windows-update is in the PATH environment variable.
  3. Add all required environment variables in the packer.json file to your environment (perhaps use direnv).
  4. Build the image by running the command: packer build packer.json.

How to use a Windows image in GCP

  1. In a web browser, go to https://console.cloud.google.com/compute/images.
  2. Filter images by the name you used when creating image, windows is likely all you need to filter by.
  3. Click the image's name.
  4. Click the CREATE INSTANCE link.
  5. Important: Change name to what you'd like as you can't change it later.
  6. Optional: Change Region to be closest to you as well as any other option you'd like.
  7. Click Create at the bottom of the page.
  8. Click the name of your newly created VM Instance (optionally you can filter to find it).
  9. Click Set Windows password.
  10. Optional: Set a username or use default.
  11. Click Next.
  12. Copy and save the password as it won't be shown again.
  13. Click RDP down arrow.
  14. Click Download the RDP file.
  15. 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).
  16. Click Continue to accept the certificate.
  17. 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

nix -> Windows cmd tips

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. > and 2>&1)
  • .\some.exe to call a local executable
  • curl is available
  • .. and . are available