Build system software could arguably be the heart of your software delivery pipeline. From compiling code to orchestrating various levels of testing suites, your build system will have a hand in some very important tasks.
Cooperating directly with your chosen version control software, the build system can be configured to validate the integrity of code checked-in by developers and report any build errors and unit test failures. By doing this, the build system acts as a virtual safety net. If build errors are reported or testing suites fail, the proposed changes never make it to the deployment package. The value of this is immense, allowing organizations to have an additional degree of confidence when deploying code to production servers ten or even hundreds of times per day.
The decision on which build tool to integrate within your solution will be based on a number of factors:
- Does it interact well with other members of the toolchain, particularly version control?
- What’s the level of support for third-party software via plugin libraries, etc.?
- Written configuration or web interface: How are jobs created and scheduled?
- What is the quality of available documentation?
- User preferences and prior experience with specific technologies
With a build system in place, it’s possible to further streamline this process using an artifact repository tool. When we develop an application, we commonly use supporting development libraries from a variety of different sources. These libraries often get stored in the darkest depths of your source control system and become difficult to manage as projects scale in size.
This issue often materializes when multiple teams require access to different versions of a library with an ambiguous owner. Thankfully, situations like this can be avoided through the use of an artifact repository tool, which provides a central repository for commonly employed dependencies. This greatly simplifies the distribution of artifacts among various project teams and has the added benefit of versioning these files.
Examples of build system software: Jenkins, TravisCI, Bamboo, Codeship, TeamCity, Ant, Team Foundation Server, Artifactory, Maven, and NuGet.
Along with maintaining source code using version control software, it’s important to also store successful software builds, so you can deploy any version of your software at any point in time. Maybe you're deploying the latest build, or perhaps three versions ago as part of a rollback. Storing packages in a repository, like NuGet or Artifactory, will provide you with the flexibility to fully control both the what and when of software deployment.