42. Why do I care? Life before Hudson Dev makes a change Monday AM Nightly QA run finds a bug Monday night Dev fixes it Tuesday Lot of wasted time Life after Hudson Dev makes a change Monday AM Hudson finds a regression 30 mins later Dev can fix it before lunch
43. Why do I care? Life before Hudson QA test runs every night, results sent out in e-mail After the enthusiasm of the 1st week is gone, nobody looks at them anymore Regressions go unnoticed until it’s too late Life after Hudson Tests run Hudson after every commit E-mail sent out only when tests start failing So it manages to keep people’s attention
44. Why do I care? Life before Hudson A blocker bug is discovered in a library created by another team Fix is obvious but you don’t know which branch to commit a change … and you don’t know how to run full tests either Your only option is to write to Ashok and ask him to fix it Too bad if he’s on a family vacation to Disneyland Life after Hudson Hudson knows where the code is, how to build & run tests for it Competent devs can help, even w/o project-specific knowledge
45. Got the idea? Automation Reduce turn-around time Make things transparent Remove people from the loop Save people ’ s time Push jobs to servers, keep workstations idle for you
46. Beyond Java People are using Hudson for non-Java projects Ruby support Parse unit test results with CI::Reporter Invoke ruby script as the build Python support Parse test results Pylint report integration .NET support NAnt, NUnit, FXCop, MSBuild, and Visual Source Safe integrations You can always invoke anything through shell script
47. Dependency Tracking Dependency tracking SQA finds a test failure. Dev thinks he just fixed it. Did that fix went into that test run or not? I made a large change. I want to check that the corresponding SQA test result is good We are close to a release. We need tags from all the dependencies. Which versions are we using today? Hudson can tell you “ JAXB unit test #35 tested JAXB RI #192 ” “ JAX-WS #52 uses JAXB #185 and FI #52 ”
50. … and more Browse workspaces Build time trend report
51. Simplify Installation People are lazy (at least I am) Many won’t even try if it’s hard to install Running Hudson is easy! $ java -jar hudson.war
52. Simplify Configuration People make silly mistakes (at least I do) Think about your junior engineers So Hudson does … Let all configurations from web UI Try to minimize # of configs Inline help Extensive on-the-fly form field validation Don’t just point out problems, suggest fixes Proactively detect common problems Clock out-of-sync, low disk space
53. Extensibility points It’s all for the extensibility Stapler enables seamless UI integration Deployment-free distributed computing Most model objects are pluggable SCM, job type, builder, publisher, trigger, … These are where plugins can contribute Built-in features use the same extensibility mechanism
55. Plugin Development Environment No, actually this was my first time using maven…, I just followed the directions on your webpage and I was off and running. Peter Franza I had a similar experience: with no prior maven experience, I had my first plugin up & running so fast, I couldn't quite believe I had gotten it to work. :) Adam Ambrose
56. Distributed Builds Go distributed once you see >2 concurrent builds Builds and tests are highly CPU/memory/disk intensive Use ssh+public key on Unix to let Hudson manage slaves Automatic slave launch when Hudson restarts Auto-reconnect for dropped connections Use cygwin ssh on Windows Cygwin helps keep the platforms look uniform It’s possible to run this in different ways Like using Web Start
57. Distributed Builds Better to keep slaves look alike Don’t let builds depend on particular slaves Slaves come and go Use “labels” to classify Improving our story around VMs as slaves Prepare N environments, and run as many clones as the build needs Improving our story around cloud computing as slaves Don’t even own computers anymore
58. Simplify Installation People are lazy (at least I am) Many won’t even try if it’s hard to install Running Hudson is easy! Wait, it gets even easier Start by just a mouse click $ java -jar hudson.war