Why Not Jenkins?
When moving to Kubernetes, many would default to Jenkins for CI/CD. After all, teams are already familiar with it.
Here is why it’s a bad idea:
In choosing K8S you are likely looking to benefit from consistency and repeatability that typically comes with an opinionated standard. Jenkins, maybe a standard, but is the opposite of opinionated. Most Jenkins instances are snowflakes, comprised of multiple, poorly polished plug-ins. Lack of consistency in build process is the #1 complaint of Jenkins users. Failing to reboot your build and deployment infrastructure with an opinionated Kubernetes native system kills the very benefits one looks to achieve when standardizing on Kubernetes.
Container-Native Best Practices
Immutable definitions for build and deploy process, stored and versioned in Git.
You can think of Concourse as a tool that enables you to codify your build and deployment pipelines into a distributed, continuously running makefile.
Everything is based on three key abstractions: resources, tasks and jobs. Using these abstractions, a pipeline is defined as a clean, immutable dependency graph that continuously pushes your project forward, from source code to production.
Consistency through stateless, container-based builds
Everything runs in containers, ensuring a clean environment on every run. Each task specifies its own image, giving it full control over its dependencies, rather than managing them on your workers. This approach results in build and deployment tasks that are reproducible and easy to debug.
Integrate with external systems without plug-in hell.
Instead of relying on a complex plugin-in system, Concourse has a single strong abstraction for dealing with external resources.
For example, in integrating with Git, Concourse knows nothing about Git. Instead it comes with a git resource type implemented as container images, containing scripts that can be fetched from an artifact repository.
Simple yet effective pipeline visualization.
Pipeline configuration defined as code is automatically visualized in the web UI. Failed stages are displayed bright red. With a single click you can get to the code and see why things are failing.