We are excited to announce werf — Open Source, Go-native and simply powerful DevOps tool bringing the CI/CD implementation based on Kubernetes to the next level.

Why?

DevOps itself is all about tight collaboration of different teams and their skills. The technical part of its implementation is full of similar challenges. To get this approach efficiently working you have to glue a lot of (beautiful but still quite separate) technologies.

We have amazing tools to package applications, to implement CI/CD pipelines, to deploy & operate apps… However, developers are not that excited about all these small parts — they want to have the whole workflow “out of the box”, so they focus on what they really enjoy. To make them happy, you have to spend a lot of time (assuming there’s enough of competent engineers involved).

We consider werf as a missing part for CI/CD systems which aims to dramatically simplify the process of its implementation.

Our path

The werf project (previously known as dapp) has been started in our company, Flant, more than 3 years ago. Being written in Ruby back then, it was our proof-of-concept software intended to deal with the basic issues we’d been experiencing at that times:

minimizing the size of Docker images (and its diffs coming to the image with each commit);

of Docker images (and its diffs coming to the image with each commit); making the building of images really fast ;

; using the power of a configuration management system (it was Chef back then and changed to Ansible later) to build images following the IaC (Infrastructure as code) approach.

During the following years, our tool has become a real game changer in how we‘ve been able to deal with first steps of CI/CD for many of our customers. Thanks to it, werf has been extensively used in hundreds of applications by dozens of engineers from our and other companies.

Following the benefits of werf for both development & operations teams, we have extended its features to other parts of applications life cycle introducing such essential features as deploying images to Kubernetes clusters (via Helm).

The evolution of werf has moved in other way as well: all of its codebase has been rewritten in Golang. We strongly believe that using the de facto standard language as a fundament of Open Source project is crucial to bring it to a wider DevOps/Open Source community.

The current state

Today, werf is a powerful tool providing a complete application life-cycle management: building images, deploying applications into Kubernetes and cleaning up unused images. It is actively developed by a permanent group of committers. It is daily used by our DevOps engineers, growing number of early adopters and we welcome a wider community to join our efforts!

Main features

Werf has an advanced image builder . It makes incremental rebuilds based on the Git history. It builds images with Ansible tasks.

. It makes incremental rebuilds based on the Git history. It builds images with Ansible tasks. Werf offers you a comfortable deploy . It is fully compatible with Helm and boasts easy RBAC definition. You can control deploy process behaviour with annotations. It waits for resources readiness, prints logs and errors, allows an easy debugging by minimizing kubectl invocations.

. It is fully compatible with Helm and boasts easy RBAC definition. You can control deploy process behaviour with annotations. It waits for resources readiness, prints logs and errors, allows an easy debugging by minimizing kubectl invocations. Werf supports life-cycle management. It offers you an automatic image naming, policy based registry cleanup, debug and diagnostic instruments.

Please check more details about werf features here.

Werf in numbers

5000+ commits, 500+ releases and ~4 releases per week (on average, for the last year).

and (on average, for the last year). 1200 installations for both big and small projects.

for both big and small projects. 500+ stars at GitHub.

Versioning

Werf uses Semantic Versioning and takes an advantage of the version channels idiom. Channel is a prefix in a pre-release part of version (e.g. 1.1.0-alpha.2, 1.1.0-beta.3, 1.1.0-ea.1). Werf has alpha, beta, rc, ea and stable channels provided.

While the most mature version of werf reside in the beta channel (1.0.1-beta), the most bleeding edge is the alpha channel (1.0.2-alpha). (Mature version will be transfered to stable in the near future.) You can find more details about versioning and our backward compatibility promise here.

Additional tools

Werf has a version management tool called multiwerf. It makes it simple to automatically update werf for the specified channel continuously.

If you don’t need fully opinionated build and deploy features with werf, we also provide a low-level library and tool that werf uses under the hood — kubedog, — which is released as an independent Open Source project. Kubedog helps to watch Kubernetes resources’ readiness, and you can use it as a CLI tool or to embed it into your application as a library.

Docs and sources

Please check our installation instructions here and getting started docs here. More information on using werf as well as reference docs can be obtained at werf.io.

Werf is written in Golang, its source code is available as an Open Source project licensed under Apache License v2 at GitHub. Contributors to the project are welcome — please don’t hesitate to create your issues and send your PRs to make werf even better!