Continuous integration is a way to try and mitigate the issues that we come across by only building and testing code on our development machines. Our continuous integration server will monitor our source code repository and then every time it detects a change it will trigger a series of actions. The rst action will be to build
the code, running any tests that it can as it builds the code (usually unit tests), and then creating a deployable artifact. This artifact will then usually be deployed to a server that is a replica of the live environment. Once this code has been deployed to a server, the rest of our tests will be run against that server to ensure that everything is working as expected. If things do not work as expected, the build fails and the development team is noti ed so that they can x the problems. It's important to note that we only build the artifact once; if we rebuild it multiple times, we will be testing artifacts that are potentially different at every step (maybe it was built with a different version of Java, maybe it had different properties applied to it, and so on).
With continuous integration we are looking for a work ow like this:
UI Tests Exploratory Tests
Push to Code SCM
Build Artifact Unit Test Integration Test Contract Test
Deploy to Development Environment
Basic CI Workflow
Most continuous integration systems also have big visible dashboards to let people know the status of the build at all times; if your screen ever goes red, people should stop what they are doing and x the problem as soon as possible.