in·dom·i·ta·ble
adj.
Incapable of being overcome, subdued, or vanquished; unconquerable.
7th
DEC
Build Master
Posted by indomitablehef | Filed under Continuous Integration
I remember, with alarming clarity, when someone first explained Continuous Integration to me. I was in a rented car, between Atlanta and Nashville, with Stephen Franklin and Craig Israel. Craig was telling us how his company used NAnt and CruiseControl.Net to manage their automated builds and continuous integration. I’d heard of CI before, but never really understood it. Hearing it described that day, however, it immediately resonated with me.
I remember thinking:
Wow…this is how things ought to be done…this is the “right way”…
and then
…but I wouldn’t want to be the Build Master….that would really suck
Anyone care to guess what I spend a large percentage of my time on now?
Yep. Never one to leave an unclaimed responsibility on the table, it immediately became my mission to bring Continuous Integration back to my company. We even do database continuous integration now. All the databases can be dropped and recreated from source code with a single command. Yep, we do CI here. All the way to Eleven.
And me, well, I’m the Build Master.
15th
JAN
NashDotNet Resources
Posted by indomitablehef | Filed under Continuous Integration, .Net, Tools
- Presentation Outline
- Martin Fowler’s seminal article on Continuous Integration
- An older post from me, with resources for automating your build with NAnt and using CruiseControl.Net for continuous integration
- JetBrains TeamCity
- Customizing your build script to interact directly with TeamCity’s simple API
- MSBuild Community Tasks
- PsExec
- Visual Studio Web Deployment Projects Download
- Ruby Programming Language
- Rake NUnit Task
- OMG, Rake! - Dave Laribee on using Rake to automate your builds, with links to helpful resources for learning Rake
- Rake documentation
- Example Project and Example Automated Build scripts from the presentation
look under “source” /trunk/NashDotNet
5th
MAR
TeamCity is da bomb
Posted by indomitablehef | Filed under Continuous Integration, Tools
I’ve been working with TeamCity, JetBrains new Continuous Integration product, for a couple of weeks. I’m completely infatuated with it right now. It has a quirk or two to deal with when getting it set up, but configuring builds is much easier than with CruiseControl, and the amount of information it gives you back is fantastic. Logs of your changes, trends on how long your unit tests are running, statistics, it’s nearly overwhelming. The Professional Edition (up to 20 users, 3 agents, 20 build configurations) is just as free as Cruise Control, too.
I did have to make some changes to how I ran my NUnit tests, in order for TeamCity to pick up on them. I had been calling nunit-console.exe from within my NAnt build file, like so:
<exec basedir="toolsnunitbin">
useruntimeengine="true"
workingdir="build"
program="nunit-console.exe"
commandline="${project::get-name()}.Test.Unit.dll
/xml=${project::get-name()}.Unit.Test-Result.xml" />
</exec>
While that ran my tests just fine, and output the results to the xml file, TeamCity didn’t pick up on that. CruiseControl.Net picks it up when you add this to the <project> node in your ccnet.config file:
<publishers>
<merge>
<files>
<file>C:checkoutsMyProjectbuild*test-result.xml</file>
</files>
</merge>
<xmllogger>
</xmllogger>
</publishers>
But that’s beside the point…we’re talking about TeamCity here. For TeamCity to recognize my tests, I had to use the <nunit2> NAnt task, like so:
<target name="unit.test.nunit2" depends="unit.test.compile">
<copy file="config\Web.Config"
tofile="build\${project::get-name()}.Test.dll.config" />
<nunit2 verbose="true" haltonfailure="false" failonerror="true">
<formatter type="Plain" extension=".txt" usefile="true"
outputdir="${project.root}\build"/>
<test assemblyname="build\${project::get-name()}.Test.dll"
appconfig="build\${project::get-name()}.Test.dll.config"
haltonfailure="false" />
</nunit2>
</target>
19th
FEB
Continuous Integration
Posted by indomitablehef | Filed under CruiseControl.Net, NAnt, Continuous Integration, Tools
If I had to rank the things I’ve learned in the past year in order of importance, the undisputed #1 would be Continuous Integration. I’ve known about CI for some time, and I always thought it sounded like a good idea, but I hadn’t made time to try it out. Now that I have, I can hardly imagine working without it. I’m hardly an expert yet, but I’d like to pass on some of the resources that helped me when I was first learning how to set up Automated Build with NAnt and Continuous Integration with CruiseControl.Net.
- John-Paul Boodhoo’s NAnt starter series
You have to have an automated build in order to get continuous integration working. Even if that weren’t true, automating your build process would still be and incredibly valuable thing to do. I chose to use NAnt, partly because of the existence of good community content, and lots of examples on how to use it. There’s a medium-steep learning curve, but once you’ve figured it out, it’s really not that hard, and you can really harness the power of automated builds. You don’t have to use NAnt, of course…you could also use MSBuild. Compare the two here. And here. More on using MSBuild here. - Automating Your Builds With NAnt - Part 8 (Enter CruiseControl)
Also from JP Boodhoo, this hour-long screencast will take you step-by-step through the process of setting up Continuous Integration using CruiseControl.Net and NAnt. - Martin Fowler’s seminal article on Continuous Integration
Not convinced that CI is the best thing since Tivo? Read it and see if you feel the same way afterward. - ASP.Net Web Application builds using Nant
If you’re using Web Application Projects, you’ll need this and maybe this, too. - NAnt task for creating IIS application pool mappings
If you’re developing on Windows Vista, like me, and using IIS7, you’ll want to direct your .Net 3.5 apps to the default application pool, and your .Net 2.0 apps to the “Classic .Net 2.0″ Application pool. - How to handle embedded resources with NAnt
I’m using the Wilson ORMapper, and ran into some trouble, initially, with the embedded mapping.config file. This cleared it up. - More good examples of using NAnt to build .Net applications
- NAnt Contrib
A bunch of additional NAnt tasks
I should note that CruiseControl.Net is not the only choice for continuous integration. Microsoft Team Foundation Server has continuous integration features, and JetBrains has just realeased TeamCity (there’s a free version), which this guy says is fantastic.
Recent Posts
Recent Comments
- Open Floor Plan vs. Private Offices « Step Into Design on It's Caves AND Commons...
- indomitablehef on Forms Authentication in Asp.Net MVC, Part II
- Dugald Wilson on Forms Authentication in Asp.Net MVC, Part II
- MyWeeklyLinks – Week 5 « Ole Morten Amundsen on Implementing Done, In Process, and Ready Queues in LeanKit Kanban
- indomitablehef on Schema Generation using FluentNHibernate and S#arp Architecture
Categories
- .Net (5)
- Agile (17)
- Alt.Net (3)
- Anti Patterns (3)
- Asp.Net MVC (9)
- Continuous Integration (4)
- Craftsmanship (1)
- CruiseControl.Net (1)
- DDD (6)
- DevLink (2)
- jQuery (2)
- Kanban (4)
- Lean (2)
- LeanKit (3)
- NAnt (2)
- NHibernate (2)
- ORM (1)
- Personal (4)
- Productivity (6)
- qUnit (2)
- Refactoring (1)
- S#arp Architecture (2)
- SOLID (1)
- SqlTdd (5)
- TDD (17)
- Tools (12)
- Uncategorized (11)
- Visual Studio (4)


