TeamCity A Professional Solution for Delivering Quality Software, on Time Vaclav Pech Senior Software Developer JetBrains, Inc. www.jetbrains.com About Us · Vaclav Pech ­ Professional software developer for 9 years ­ IntelliJ IDEA and TeamCity evangelist · JetBrains ­ Makers of award winning productivity tools · IntelliJ IDEA, TeamCity, ReSharper, and more www.jetbrains.com 2 About the presentation · Part 1: ­ Continuous integration · Part 2: ­ Solving problems from a developer's perspective · Questions and answers www.jetbrains.com 3 Part 1: Continuous integration · Automatic build process ­ Triggered by · A timer · A VCS update ­ Builds the project ­ Runs tests ­ Generates artifacts ­ Notifies about the result www.jetbrains.com 4 Continuous integration benefits · You're always aware of the current project status · Spend less time investigating integration bugs · Spend less time fixing broken code www.jetbrains.com 5 TeamCity is a ... · Continuous integration tool · Quality Control tool · Tool for team cooperation www.jetbrains.com 6 TeamCity is also ... · IDE-independent · Platform-independent Free Professional Edition available www.jetbrains.com 7 Architecture www.jetbrains.com 8 Part 2: TeamCity solving problems · · · · · · · Build server administration Notification spam Nobody fixes the build Locating failures Integration Code quality Tests not run before commit www.jetbrains.com 9 Problem: · Build server administration ­ Many builds to run · · · · Several projects Different branches Multiple test suites Multiple platforms ­ Multiple machines to run the tasks www.jetbrains.com 10 Solution: Distributed builds www.jetbrains.com 11 Solution: Distributed builds · Multi-platform testing · Easy administration ­ Automatic update · Optimized task distribution ­ Time estimates ­ Build queue · Any computer can be used as an agent www.jetbrains.com 12 Problem: · Notification spam ­ Inbox is full of e-mail notifications ­ Hard to extract useful information from a failed build notification ­ People stop reading notifications www.jetbrains.com 13 Solution: Clean notifications · Less frequent ­ Only failed builds ­ Only builds with my changes ­ Failure after success, success after failure · Earlier ­ As soon as a failure is detected · Simpler ­ IM, IDE status bar ­ Complete details in IDE or through Web UI www.jetbrains.com 14 Problem: · Nobody fixes the build ­ Build starts failing after multiple changes by different developers ­ Everyone thinks that someone else is currently fixing it ­ No fixing actually happens www.jetbrains.com 15 Solution: Take responsibility · Easy detection of code changes included in the failed build · Developer can take responsibility · Different severity indicated for failures without responsibility set www.jetbrains.com 16 Problem: · Locating failures ­ Reports in another app ­ Hard to find the problem details in reports ­ No links to source code www.jetbrains.com 17 Solution: IDE integration · Show test results just as if they ran locally · Direct links to the source code · Hanging build detection and notification · Thread dump · Intuitive UI · Optimized for daily use · Web · Integrated into IDEs www.jetbrains.com 18 Problem: · Integration ­ We cannot build with our build tool ­ We have problems with the VCS ­ Our test reports cannot be displayed www.jetbrains.com 19 Solution: Integration · Different VCSs ­ CVS, SVN, ClearCase, ... · Runners · · · · Ant Maven 2 IntelliJ IDEA projects Command line · Notification · Email, RSS, Jabber, IDE, windows Tray Notifier · IDEs · Eclipse, IntelliJ IDEA, Visual Studio · Test frameworks · JUnit, TestNG, EMMA, Cobertura (planned) www.jetbrains.com 20 Solution: Extensibility · Plugins ­ Custom statistics report tools ­ External status widgets ­ Notifiers ­ Runners ­ Triggers ­ User authentication ­ VCSs www.jetbrains.com 21 Problem: · Developers rarely use tools for code quality ­ Breaks workflow ­ Results often disconnected from code ­ Too much time required for large projects www.jetbrains.com 22 Solution: Server checks for quality · Inspections ­ 700+ rules for Java, JavaScript, HTML, XML, ... · · · · unused and unreachable code, declaration redundancies, performance issues dependency rules · Code coverage · Code duplicates www.jetbrains.com 23 Problem: · We don't always run the tests before commit · They take too long to run · Complicated environment setup · Need to run tests in different environments ­ 5 o'clock checkin · Result · Broken code in VCS · Others cannot work · Particularly bad with distributed teams www.jetbrains.com 24 Solution: Pre-tested commit · Pre-tested commit ­ Let TeamCity run the tests before your changes hit VCS · Your machine is available for further coding · No more broken builds ­ Run personal builds at any point in time to ensure you are still on track www.jetbrains.com 25 www.jetbrains.com 26 Summary · Team-focused productivity · IDE independent · Eliminates a number of traditional continuous integration problems · Free professional edition ­ Contact me: vaclav@jetbrains.com www.jetbrains.com 27 Questions www.jetbrains.com 28