Version 5, last updated by chrisb206 at March 09, 2009 UTC

The Build Lackey Labs Provisionizer


Overview

The Provisionizer automates the installation and setup of the third party
frameworks and utilities needed to build, test, and deploy
today's industrial strength Java applications.

While a JVM and a reasonable text editor were sufficient to
create toy applets in the late 90's, modern Web 2.0 application development
requires a much broader range of tool support: dynamic languages (e.g., Groovy,
Ruby), frameworks such Grails or Rails, build tools such as Ant or Maven,
and test frameworks such as Canoo or Fitness, to name a few.

In addition to the must-haves, all development organizations can benefit
from proactively providing their engineers with the best-of-breed third party tools that help them code, test, and debug more effectively. Consider the
productivity lift you experienced when you discovered tools
such as WinMerge (or similar diff/merge utilities), the Sysinternals Process Explorer, and XML editors such as Oxygen. How much more effective would
your developers be if they didn't have to discover, then install these
tools on their own ? The Provisionizer enables your senior developers
to determine the tool set that should be available to each and every member
of the team, and ensures that these tools will be correctly and
automatically installed as part of a unified provisioning process.


Pain Points Addressed


Setting up a new developer box or contintual integration (CI) server for
a large scale Java app can easily take hours. It can take days if
you are a recently onboarded developer, if the set-up instructions get
stale, or if you miss a step. The obscurity of the resultant
build-time and run-time failures can Drive You Nuts.


Complex manual set up processes can also lead to inconsistencies between
individual developer environments, CI machines, and production
environments. Such inconsistencies can be an irksome source
of hard-to-track bugs.


Summary of Provisionizer Benefits


By dramatically reducing the number of manual steps required for setting
up environments you can:

* reduce the ramp-up required for new developers to get productive;

* ensure consistency across developer environments

* make development more pleasant by reducing "monkey work".

* achieve a higher degree of consistency between development and
production configurations with the result that bugs discovered
in production have a better chance of being reproducible in
the development environment. This, in turn, means that developers don't
need to be granted access to production to resolve critical bugs,
and can rely on their standard tools in the course of the resolution
process.


Features


* Operates in either Command-line mode or via a Web Browser Based GUI
(signed java applet)

* "While You Wait" Content Display.

* As components are being downloaded content Blog and Mailing List RSS feeds are read and displayed "ticker style". The RSS content is interleaved with ads. For an example, of the type of widgets
that will be used in this presentation, please see the side bar of the buildlackey.com site.
(GUI mode only)


* Multiple repository and protocol support for storing 3rd party artifacts.

This means that artifacts can be stored on a shared file system,
an HTTP server, or even within a Maven repository.


* Multi code branch and multi JVM development support

* As a software product matures the need to support
multiple back versions will likely arise. Different versions
of a given product will likely have different third party
dependencies (at either build time or run-time, or both).

* The Provisionizer enables your development staff to
install any number of versioned "configuration sets" of
3rd party components. It provides an easy way to
set your current environment to use the tools and frameworks
that comprise a configuration set at any version level.

As an example of where this would be useful, let's say
your team is responsible for an Eclipse plugin that
allows you to visually construct and debug Ant tasks.

Version 1.0 of your product might have been developed with Java 1.4
and therefore might make use of variable names like 'assert'
or 'enum' that are no longer valid as of Java 1.5. You therefore
need to compile using version 1.4, but you need to test
under all JVM's (and versions of Eclipse) for which your
product is officially supported. Patches of the 1.0 product
need to occasionally be created, tested and released for the
paying customers who choose to be at that version level.

This means that developers working against this branch need
some way (hopefully an easy way) of configuring an environment
with an older 3rd party component set up.

The complexity grows as you consider that the build process for
the latest version of your product may require a newer version of
Ant, while your QA team needs to test against every Ant version
at or above the minimum version officially supported..
This example should illustrate the complexity of setting
up and managing an environment that includes all versions of
the 3rd party components needed to build and test all major releases
of your product line.


Please see this section for technical details as to how versions
are stored and managed by the Provisionizer.


TODO -- need link...