In this presentation, I discuss the merits of continuous integration (CI), offer a brief survey of various CI frameworks, and show how to incorporate CI into your own Perl projects. For a working example, go to http://perlcritic.com:8111 and click "Login As A Guest".
4. During The
“Integration” Phase...
• Compile & link code
• Manage resources
• Run tests
• Create deliverable
Continuous integration means
doing these automatically
5. How it Works
• CI server watches your repository (remote
or local).
• When changes appear in the repository, do
stuff like...
• Check out the code.
• Run some commands.
• Report on the results.
8. Choices, Choices
• CruiseControl: ThoughWorks; Java; Free
• Buildbot: From Mozilla; Python; Free
• Hudson: Open source; Java
• TeamCity: From JetBrains; Java; Commercial
9. Basic Features
• Interface to an SCM system
• Facility to run commands
• Facility to publish artifacts
• Reporting and statistics
• Notifications and monitoring
10. Advanced Features
• Report test results and track trends
• Manage component dependencies
• Manage version numbers and tags
• Integrate with bug-tracking systems
• Delegate tasks and responsibilities
• Distributed integration services
• Fine-grained access controls
• Shiny web interface for configuration
11. But No Native Support
For Perl
• They don’t understand Module::Build or
ExtUtils::MakeMaker
• No support for TAP
12. Bridging The Gap
• Ant script that wraps Module::Build actions
• Custom TAP formatter
13. See It work
• Demonstrate projects & builds
• Show failed build
• Show overview, changes, log.
• Show tests (failed, ignored), searching
• Show failed-in/fixed-in build.
• Show responsibility
14. See It work
• Show build overview, change log, statistics
• Show artifacts (coverage, nytprof)
• Show timed & dependent builds
• Show administration
15. Lessons Learned
• CI is not your mommy
• You must manage your CI configuration
• Perl is getting left out in the cold