Re: Making testing on Windows easier

From: Craig Ringer <craig(at)2ndQuadrant(dot)com>
To: Magnus Hagander <magnus(at)hagander(dot)net>
Cc: Andrew Dunstan <andrew(at)dunslane(dot)net>, Tomas Vondra <tv(at)fuzzy(dot)cz>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Making testing on Windows easier
Date: 2013-01-21 02:01:29
Message-ID: 50FCA179.6030208@2ndQuadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 01/17/2013 09:36 PM, Magnus Hagander wrote:
>
> Yeah. I used to have an AMI with the VS environment preinstalled on
> Amazon, but I managed to fat finger things and delete it at some point
> and haven't really had time to rebuild it.
>
> Having a script that would download and install all the pre-requisites
> on such a box would be *great*.
I'm working on it:

https://github.com/2ndQuadrant/pg_build_win

http://blog.2ndquadrant.com/easier-postgresql-builds-for-windows/

I've identified the silent install procedures for most of the required
tools (see the docs) and got build recipes written for some of the
library dependencies. The next planned step is to have the scripts
automatically download and silent-install Visual Studio, etc, rather
than have the user run the command lines given in the README manually.

It's usable as-is, I just need the time to finish it off. The goal is to
have a script that turns building PostgreSQL on a clean fresh Windows
install into:

- Download ActivePerl
- Install ActivePerl
- Run "buildgit.pl check install"

Right now it takes a fair bit more than that, but it's already better
than a fully manual build.

> Then you could get up and going pretty
> quickly, and getting a Windows box up running for a few hours there is
> almost free, and you don't have to deal with licensing hassles.
>
> (Of course, the AMI method doesn't work all the way since you'd be
> distributing Visual Studio, but if we can have a script that
> auto-downloads-and-installs it as necessary we can get around that)
I've found EC2 to be unusably slow for Windows builds, with a medium
instance taking an hour and a half to do a simple build and "vcregress
check". They're also restrictive in disk space terms, so you land up
needing to add a second EBS volume.

A local kvm instance works well if a physical host isn't available; so
do some of the alternative cloud providers like LunaCloud, which seems
to perform significantly better in the quick testing I did. I haven't
tried GoGrid yet.

Many of us have Windows license stickers on laptops/desktops, even if we
don't use the thing, so for a signficiant proportion of people it's as
simple as downloading Windows install media (
http://blog.ringerc.id.au/2012/05/you-can-download-legal-windows-7-iso.html)
and installing a KVM instance then shapshotting it.

I've also put together a Jenkins server that runs builds on Windows
whenever they're pushed to watched git repos. I'd love to make this
public, but unfortunately allowing a wide group to run arbitrary code on
the current build box isn't something I can afford. I'd need a system
that launched a snapshot Windows instance for each build and then
destroyed it at the end. This is entirely practical with something like
KVM, so if I ever get the chance to work on a Jenkins plugin to do that
(or to launch/destroy Windows cloud instances automatically), it's
possible a semi-public Windows build testing service may be possible.

While we're in fantasy land, the next step would be adding git URLs and
branch names to the commitfest app, so it could ping a continuous
integration server to build-test any new patch added to the CF. Right
now I'm doing that manually when I have time, but it's slow going.

--
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Craig Ringer 2013-01-21 02:03:32 Re: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review]
Previous Message Josh Berkus 2013-01-21 01:57:35 Re: dividing privileges for replication role.