Search code examples
build-processworkflowrelease-management

App build/deployment workflow


What do you use to manage the workflow of deploying your application after the build completes? I'm not talking about just the act of getting files on a server, I'm talking about what happens after that. Verification, testing, approval, migration to production, retiring old builds, etc.

Example:

  1. Build completes
  2. Build is deployed to a test environment
  3. Testing is completed (manual step)
  4. If testing passes deploy to UAT else reject build
  5. UAT is completed (manual step)
  6. If UAT passes deploy to Prod else reject build
  7. Retire build previously in Prod

Any good applications out there that can manage long running build workflows?

Update

I should also mention that I'm looking for tooling that actually implements the workflow and not just to track what state it's in. (Copy build, change build status, send emails, start/stop services, etc)


Solution

  • This build and release systems are a mixture of different stuff, so following your list I'll respond:

    1. Build completes (CruiseControl with Maven Build)
    2. Build is deployed to a test environment (Ant task, called from CruiseControl)
    3. Testing is completed (manual step) (Maven tells you this)
    4. If testing passes deploy to UAT else reject build (If the tests fail, Maven won't end, no call to the ant deployer)

    From here on, we do it pretty much with a mixture of ant and bash scripts

    1. UAT is completed (manual step)
    2. If UAT passes deploy to Prod else reject build
    3. Retire build previously in Prod

    The harder thing we've found was to restart our application servers since we haven't had good experiences with hot deployments but it's doable with only maven, ant and bash.