Twelve-Factor App | Build, Release, Run - Strictly Separate Stages

The fifth factor of the Twelve-Factor App methodology emphasizes the strict separation of these stages. 

Why Strictly Separate Build, Release, and Run?

A well-defined separation between the build, release, and run stages ensures that the application is constructed, deployed, and executed in a controlled and repeatable manner.

  • Predictability: Reduces unexpected issues by ensuring consistency across environments.
  • Traceability: Allows for clear tracking of what code is deployed and running.
  • Efficiency: Streamlines the deployment process by minimizing manual intervention.

How to Separate Build, Release, and Run

Build Stage

The build stage involves compiling code, transforming source code into executable artifacts, and managing dependencies.

Example: Building a Java application with Maven:

mvn clean install
Release Stage

The release stage involves combining the build artifacts with the environment-specific configurations to prepare for deployment.

Example: Creating a Docker image:

FROM java:8
COPY target/myapp.jar /app.jar
CMD ["java", "-jar", "/app.jar"]
docker build -t myapp .
Run Stage

The run stage involves executing the application in the target environment.

Example: Running the Docker container:

docker run -e DATABASE_URL="jdbc:postgresql://db:5432/mydb" myapp

Deployment Strategies with Build, Release, Run

The separation of these stages is vital for automating deployments.

  • Build Stage: Compile the code and manage dependencies.
  • Release Stage: Package the application with configurations.
  • Run Stage: Deploy and monitor the application in the target environment.


Strictly separating the build, release, and run stages aligns with DevOps's automation and consistency goals.