kubernetes-operator/README.md

2.7 KiB

Jenkins Operator

Kubernetes native Jenkins operator which manages Jenkins on Kubernetes. It was built with immutability and declarative configuration as code in mind.

It provides out of the box:

  • preconfigured Kubernetes plugin
  • Seed Jobs and DSL Pipelines as code
  • integration with Configuration as Code plugin
  • secure and hardened Jenkins instance
  • basic authentication with username and password

The main reason why we decided to write the jenkins-operator is the fact that we faced a lot of problems with standard Jenkins deployment. Also, we heavily use Jenkins on large production Kubernetes clusters in a multi-tenant environment.

Some of the problems we want to solve:

  • volumes handling (AWS EBS volume attach/detach issue)
  • installing plugins with incompatible versions or security vulnerabilities
  • declarative configuration as code
  • lack of end to end tests
  • make Jenkins more suitable for dynamic environment and handle graceful shutdown properly
  • security and hardening out of the box
  • orphaned jobs with no jnlp connection
  • make errors more visible for end users

Documentation

  1. Installation
  2. Getting Started
  3. How it works
  4. Developer Guide

Contribution

Feel free to file issues or pull requests.

TODO

Common:

  • simple API for generating Kubernetes events using one common format
  • VirtusLab docker registry https://hub.docker.com/r/virtuslab/jenkins-operator
  • decorate Jenkins API client and add more functions for handling jobs and builds e.g. Ensure, CreateOrUpdate
  • documentation
  • VirtusLab flavored Jenkins theme
  • create Jenkins Jobs View for all jobs managed by the operator
  • jenkins job for executing groovy scripts

Base configuration:

  • install configuration as a code Jenkins plugin
  • handle Jenkins restart when base configuration has changed
  • install and configure Kubernetes plugin (in-progress)
  • e2e pipelines using Kubernetes plugin
  • Jenkins hardening, disable insecure options

User configuration:

  • user reconciliation loop with CR validation
  • configure seed jobs and deploy keys
  • e2e tests for seed jobs
  • configure Jenkins authorization (via configuration as a code plugin or groovy scripts)
  • backup and restore for Jenkins jobs running as standalone job (AWS, GCP, Azure)
  • trigger backup job before pod deletion using preStop k8s hooks
  • verify Jenkins configuration events