Go to file
Maciej Olesinski f91e5bd61d Developer docs update 2019-01-10 16:23:15 +01:00
build Add reconcile loop of Jenkins base configuration 2018-12-06 09:29:38 +01:00
cicd Add cicd pipeline 2019-01-10 15:52:55 +01:00
cmd/manager Bump operator-sdk to v0.2.0 2018-12-12 09:43:29 +01:00
deploy Add cicd pipeline 2019-01-10 15:52:55 +01:00
doc Developer docs update 2019-01-10 16:23:15 +01:00
pkg Add user configuration groovy scripts job 2019-01-10 15:36:25 +01:00
test/e2e Code refactoring 2019-01-09 06:20:08 +01:00
version Add reconcile loop of Jenkins base configuration 2018-12-06 09:29:38 +01:00
.gitignore Add reconcile loop of Jenkins base configuration 2018-12-06 09:29:38 +01:00
Gopkg.lock Add base configuration groovy scripts job 2019-01-10 14:44:30 +01:00
Gopkg.toml Update seedjob and jenkins client 2018-12-20 16:36:11 +01:00
LICENSE Initial commit 2018-10-19 16:20:19 +02:00
Makefile Refactoring, additional tests and update README.md 2018-12-27 18:17:54 +01:00
README.md Update docs 2019-01-08 21:44:17 +01:00
VERSION.txt Add reconcile loop of Jenkins base configuration 2018-12-06 09:29:38 +01:00
checkmake.ini Add checkmake config 2018-10-26 18:17:26 +02:00
config.env Add Makefile goals for minikube 2018-11-05 15:59:26 +01:00
jenkins-operator-draft.png Update README.md and add initial jenkins-operator draft 2018-12-27 20:35:56 +01:00
phases.png Update README.md and add how it works section 2019-01-05 20:22:14 +01:00
reconcile.png Update README.md and add how it works section 2019-01-05 20:22:14 +01:00

README.md

Jenkins Operator

What's Jenkins Operator?

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

It provides out of the box:

  • integration with Kubernetes
  • pipelines as code
  • extensibility via groovy scripts or configuration as code plugin
  • security and hardening

Problem statement and goals

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. We want to make Jenkins more robust, suitable for dynamic and multi-tenant environments.

Some of the problems we want to solve:

  • volumes handling (AWS EBS volume attach/detach issue when using PVC)
  • installing plugins with incompatible versions or security vulnerabilities
  • better configuration as code
  • lack of end to end tests
  • 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 and configuration as code (from ConfigMap)

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
  • watch other Kubernetes resources by the fixed labels

User configuration:

  • user reconciliation loop with CR validation
  • configure seed jobs and deploy keys
  • e2e tests for seed jobs
  • mask private key build parameter using mask-plugin
  • 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