RSS RSS feed | Atom Atom feed

Rapid Deployment - reducing friction

I got a nice email from Jay Flowers a few weeks ago about my post on "Enterprise Continuous Integration". He also showed me some things he is doing around using cc.net and nAnt to do packaging of an ISO image. Pretty cool stuff! Anyways, I'll let Jay write more about his stuff - what I want to write about is the system we put together for deployment. I told Jay about it in email, now I will share it with you.

For a while, we had been using WiX to create deployment packages, and if you have the right kind of project, I highly recommend it. It was a bit too much power for our needs though - we are developing server-side applications, and we only have 1 production box to deploy to. Maintaining the WiX files was getting to be a pain, so we went with a much simpler solution - zip files. We are pretty much an 'XCOPY' deployment at this point, but we do use nAnt to drive it. The thing that has made us happiest though, is the way we deploy to our development and testing environments.

Like many shops, we have a development environment, a testing environment, a staging environment, and a production environment. Our production environment consists of a completely separate domain, with a Windows domain controller, plus a web server, app server, and database server. To replicate this in our dev and test environments, we have a beefy host machine that runs all those as Virtual Machines. The pain in the neck turned out to be copying things between the build machine and the development environment - IT wouldn't let us do anything like set up a trust relationship between the dev environment domain and the corporate domain, so just copying files was a pain - the machines could see each other, but the permissions weren't there. So here's what we did...

After creating the zip file that contains the images of the web server and app server, we then wrote a simple 'bootstrap' nAnt file that extracts the zip to a temporary directory and then runs a separate nAnt file that is embedded inside it. We then installed CruiseControl.net on the development environment app server. It has one project, "Deploy App Server Dev" that first does an SVN update to get the latest zip file, then executes the bootstrap build. The bootstrap build extracts the zip file contents to a temporary directory, and then runs the nAnt build inside that zip to actually do the deployment. The environmental settings needed (names of the servers, database connection information, etc.) is all part of the deployment build file, and is customized for each of the 2 environments we set this up in - dev and test. At the end of the deployment, we use the StructureMap verification tools to ensure that the environment settings are correct.

When we are going pretty fast, we'll set up the cruise control on the dev environment to actually do a deploy automatically when it sees that a new build is ready. When we want more control, we leave the CC.Net triggers block empty to make it be 'manual only'. We keep it as a manual step on the test environment as well.

So now, to deploy the latest build to dev or test is just a matter of opening up our CCTray app, selecting the "Deploy App Server Dev" project, and forcing a 'build'. That makes things so much smoother.

Now, if we could only get the IT folks to allow us to do this on the production environment...

Technorati tags: , ,

Austin Coding Calendar

I recently switched to gmail for my personal email needs, and I have been really pleased with it. They have also recently introduced the Google Calendar, and I started using that as well. My latest discovery, though, was that you can share calendars and include other calendars in your 'view'. I did a search for Austin related calendars and came across the Austin Coding calendar, which listed a few programming-related events. I emailed the owner and asked him to allow me to add things, so I present to the programmers in Austin the new and improved Austin coding calendar!

If you would like to add this calendar to your set of google calendars, there is a small button at the bottom right with a 'plus sign' that will do the adding for you.

I've added a lot of the events that I know of - email me if you know of anything else that should be added. I would love for this to become a widely used resource.

Support Julie, support breast cancer research

 My lovely wife Julie has been working really hard for the past two  years to get into better shape, and now she is going to try something new. She's going to be running in the Susan G. Komen Foundation Race for The Cure here in Austin. The race is a 5K, and will be on Sunday November 4th. She'd really love some support. Visit her race page and make a donation today!

Code review tools

When I first started at my current company I had the pleasure of meeting Jason Cohen, who had worked for the company previously. After leaving, he started a company called SmartBear Software that develops code collaboration tools. One of their primary products is CodeCollaborator - a tool that integrates with your software version control system to enable developers to do lightweight code reviews all online. Here is the description from their website:

CodeCollaborator enables peer review of source code changes before or after files are checked into version control. Automate audit trails and metrics, enforce workflow rules, and generate reports. Integrates with SCM, issue-tracking, reporting, and other external systems.

I went to a demo he gave not too long ago, and what he has is pretty slick. If you aren't doing pair programming, this is probably the next best thing, especially if you have team members that are not co-located.

Well, today I got an announcement from Cenqua announcing the latest release of FishEye, which is a cool web-based tool for seeing what is going on in a source code control system. I first evaluated it several years ago at a previous employer. At the time it only supported CVS, but it now also supports Subversion and they have Perforce support in beta. It is a very slick tool.

ANYWAYS... Looks like Jason is in for some competition. Cenqua is currently doing a closed beta of something they call Crucible that sounds like it wants to do the same thing as CodeCollaborator.

Nice article on Maven

Jason Van Zyl, one of the key contributors to Maven, wrote a really good article describing Maven. It sounds like a really sweet environment to work in. We have tried to do something similar here with the way we share dependencies, but Maven is way more flexible. Good read. Architecture - Building for Artifact-Driven Development

A Favorite Quote

A recent conversation with a co-worker of mine about overly specific job descriptions brought this quote to the surface of my mind. The description in this case was someone looking for a developer with experience writing Eclipse plugins. I likened that to someone looking for a trim carpenter with experience installing cat flaps.

I always have liked this quote. Unfortunately, I have never taken the effort to memorize the whole thing. Thank goodness for google. Here ya go:

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.
-Robert A. Heinlein
Tags :

Getting FTP working with Live Writer

So I think I am finally going to be able to publish pictures! I installed FileZilla FTP server, got that configured. Check.

Open up Firewall port 21 on the hardware firewall, check.

Open up Firewall ports 5000-5020 on the hardware firewall for PASV FTP, check.

Open up firewall port 21 on the server machine in the Windows Firewall, check.

How do you open up 5000-5020 in the Windows firewall though? Here's the trick:

http://www.newagedigital.com/cgi-bin/newagedigital/articles/ms-firewall-ftp.html

Cool beans!

Checking out Windows Live Writer

I was reading Alec Saunders' blog the other day and he mentioned testing out the Windows Live Writer beta. So here I am doing the same. Pebble supports the MetaWeblog API, which is also supported by Live Writer, so it seems to be working. The only thing I really had to figure out when setting it up was the address for metaweblog calls, which happens to be http://hostname/pebble/xmlrpc.

So far, I like it. Rich text editing. All the little hotkey shortcuts I expect are there - Ctrl+K inserts or edits a link, Ctrl+I makes things italic. Pretty sweet. There is a claim that it will insert pictures, which has always been a pain with pebble, so I'll try that now.

Darn. Turns out MetaWeblog doesn't support image publishing.

Live Writer also supports inserting maps for some reason, so I tried to insert a map of my office. It was pretty easy to insert too - just type in the address and it goes there. Zoom in, zoom out, pan, add a pushpin. No way to have it do directions yet. It will be interesting to see what it looks like when it is published.

Darn. It has an image, and that doesn't work (as noted above).

I'll have to get Julie set up with this. The basic functionality is cool.

Update - while the MetaWeblog API doesn't support image uploading, it does support FTP uploading. So (hopefully) as soon as I get an FTP server set up and configured correctly it will be able to publish pictures more easily.

Google Maps Flight Sim

Start flying at my office: Goggle flight sim After clicking the link, just press start. The curvy building is my office.

YouTube - Bump keying

Scary - this shows an easy way to open just about any lock in seconds, with little to no expertise needed. YouTube - Bump keying