Skip to content

graphext/furan

 
 

Repository files navigation

Furan

Furan 2


Scale out Docker builds


Go Report Card

Furan 2 is a scalable, Kubernetes-native Docker build microservice (API) that builds and pushes Docker images from a specified GitHub repository to a specified image repository.

Furan supports gRPC and JSON clients, and runs builds asynchronously using BuildKit in single-shot, rootless Kubernetes Jobs.

Furan supports pushing build artifacts to the following image repository services:

(Both public and private image repositories are supported.)

Expressed in plain English, Furan handles build requests such as:

"Build the GitHub repository acme/foo at commit SHA xxx using the Dockerfile in the root, and push the resulting image to the image repository at quay.io/acme/foo:tagname."

Furan is a core part of the Dollar Shave Club software delivery pipeline and is used programmatically by services such as Acyl.

Architecture

Furan's only runtime dependencies are PostgreSQL and Kubernetes.

Architecture

API

At a high level, the Furan API consists of the following RPCs:

  1. StartBuild (asynchronously begin a build/push job)
  2. MonitorBuild (get a realtime stream of build messages for a running job)
  3. GetBuildStatus (get the status of a running job)
  4. ListBuilds (get a list of build jobs according to a set of criteria)
  5. CancelBuild (abort an actively running job)

For more details, see the protobuf definition.

Differences between Furan 1 and 2

Furan 1 did not require Kubernetes, and executed builds in the same server process via an external Docker Engine. If running in Kubernetes, this was a Docker-in-Docker (DinD) sidecar. To support the asynchronous API, Furan 1 had a large set of dependencies including Kafka, Consul and Cassandra/ScyllaDB.

In contrast, Furan 2 has greatly decreased runtime dependencies, simplified deployment and more efficient use of compute resources and now requires Kubernetes. Furan 2 uses BuildKit instead of Docker Engine and uses rootless build jobs by default. Furan 2 also now supports build cache.

···

Packages

No packages published

Languages

  • Go 96.1%
  • Shell 1.4%
  • Mustache 1.3%
  • Smarty 0.6%
  • PLpgSQL 0.4%
  • Dockerfile 0.2%