Build automation

{{Short description|Building software via an unattended fashion}}

{{Software development process}}

Build automation is the practice of building software systems in a relatively unattended fashion. The build is configured to run with minimized or no software developer interaction and without using a developer's personal computer. Build automation encompasses the act of configuring the build system as well the resulting system itself.

Build automation encompasses both sequencing build operations via non-interactive interface tools and running builds on a shared server.{{cite book |last=Ceruzzi |first=Paul E. |date=2003 |title=A history of Modern computing |publisher=The MIT Press |isbn=978-0-262-53203-7 |url=https://archive.org/details/historyofmodernc00ceru_0 }}

Tools

Build automation tools

allow for sequencing the tasks of building software via a non-interactive interface. Existing tools such as Make can be used via custom configuration file or using the command-line. Custom tools such as shell scripts can also be used, although they become increasingly cumbersome as the codebase grows more complex.{{cite web|title=Why a Build System?|url=https://bazel.build/basics/build-systems|publisher=Bazel (software)|access-date=2025-02-15}}

Some tools, such as shell scripts, are task-oriented declarative programming. They encode sequences of commands to perform with usually minimal conditional logic.

Some tools, such as Make are product-oriented. They build a product, a.k.a. target, based on configured dependencies.{{cite book |last=Clark |first=Mike |date=2004 |title=Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Apps |publisher= The Pragmatic Programmers. |isbn=978-0-9745140-3-1}}

Servers

A build server is a server setup to run builds. As opposed to a personal computer, a server allows for a more consistent and available build environment.

Traditionally, a build server was a local computer dedicated as a shared resource instead of used as a personal computer. Today, there are many cloud computing, software as a service (SaaS) websites for building.

Without a build server, developers typically rely on their personal computers for building, leading to several drawbacks, such as (but not limited to):

  • Developers who know how to build might be unavailable (e.g., on vacation).
  • Issues with a developer's machine could prevent building.
  • Conflicting software on a developer's machine may hinder proper building.

A continuous integration server is a build server that is setup to build in a relatively frequent way {{endash}} often on each code commit. A build server may also be incorporated into an ARA tool or ALM tool.

Typical build triggering options include:

Continuous integration and continuous delivery

Automating the build process is a required step for implementing continuous integration and continuous delivery (CI/CD) {{endash}} all of which considered best practice for software development.{{cite book |last1=Bashan |first1=Shmuel |last2=Bellagio |first2= David E. |date=2011 |title=Work Item Management with IBM Rational ClearQuest and Jazz: A customization Guide |publisher= IBM Press |isbn=978-0-13-700179-8}}{{how|date=January 2018}}

Advantages

Pluses of build automation include:{{cite web|url=http://www.denverjug.org/meetings/files/200410_automation.pdf |title=Pragmatic Project Automation|access-date=2025-02-15 |url-status=dead |archive-url=https://web.archive.org/web/20060522061319/http://www.denverjug.org/meetings/files/200410_automation.pdf|archive-date=2006-05-22}}

  • Can save time and money in the long run
  • Enables continuous integration, delivery and testing
  • More consistent build process
  • Can optimize the build process; reducing time and redundant tasks
  • Reduces dependency on key personnel and their personal computers
  • Can automate collection of build history

See also

{{div col|colwidth=30em|content=

  • {{Annotated link|Application-release automation}}
  • {{Annotated link|Build system (software development)}}
  • {{Annotated link|Continuous configuration automation}}
  • {{Annotated link|Continuous integration}}
  • {{Annotated link|Continuous delivery}}
  • {{Annotated link|Continuous testing}}
  • {{Annotated link|DevOps}}
  • {{Annotated link|List of build automation software}}
  • {{Annotated link|Product family engineering}}
  • {{Annotated link|Release engineering}}
  • {{Annotated link|Software configuration management}}
  • {{Annotated link|Unit testing}}}}

References