What Does ‘Automated Build’ Mean in Continuous Integration?

automationbuildscontinuous integration

I'm trying to add Continuous Integration to a project.

According to Wikipedia, one major piece of CI is automated builds. However, I'm confused about what, exactly, that means, as the CI and build automation articles seem to disagree.

Specific points of confusion: what does "automated build" mean in the context of:

  • a project using an interpreted language, such as Python or Perl?
  • building from source on an end-user's machine?
  • an application that has dependencies that cannot be simply pre-compiled and distributed, such as a database in an RDBMS local to the user's machine?

Best Answer

You are correct in noting that, for some technologies, a compilation step is not necessary. However, I recommend you take a broader view when interpreting the term "build automation". Think about "build" as including the following two major components:

  • The process for transformation source artifacts (code, database schema, documentation, etc.) deployed to an end user.
  • The application of quality assurance measures during said transformation

Automation, then, simply refers to making any--if not all--of those operations automatic (that is, not requiring manual intervention). This may include quite a variety of steps, depending on your technology:

Transformation steps:

  • Compilation
  • Linking
  • Packaging
  • Deployment
  • Data migration
  • Backup
  • Notification

Quality assurance steps:

  • Compiler warnings / errors
  • Unit tests
  • Integration tests
  • System tests
  • Deployment authentication

These days, good CI tools will let you address all of these concerns. Initially, most shops are interested in automating compilation of their code, since that's the first--and most visible--source of problems in conventional software development.