Update docs
This commit is contained in:
		
							parent
							
								
									ef7cd96cb3
								
							
						
					
					
						commit
						a6a85bcbf0
					
				
							
								
								
									
										27
									
								
								README.md
								
								
								
								
							
							
						
						
									
										27
									
								
								README.md
								
								
								
								
							|  | @ -1,24 +1,27 @@ | ||||||
| # Jenkins Operator | # Jenkins Operator | ||||||
| 
 | 
 | ||||||
| Kubernetes native Jenkins operator which manages Jenkins on Kubernetes. | ## 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 was built with immutability and declarative configuration as code in mind. | ||||||
| 
 | 
 | ||||||
| It provides out of the box: | It provides out of the box: | ||||||
| - preconfigured Kubernetes plugin | - integration with Kubernetes | ||||||
| - Seed Jobs and DSL Pipelines as code | - pipelines as code | ||||||
| - integration with Configuration as Code plugin | - extensibility via groovy scripts or configuration as code plugin | ||||||
| - secure and hardened Jenkins instance | - security and hardening | ||||||
| - basic authentication with username and password | 
 | ||||||
|  | ## 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. | 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. | We want to make Jenkins more robust, suitable for dynamic and multi-tenant environments.  | ||||||
| 
 | 
 | ||||||
| Some of the problems we want to solve: | Some of the problems we want to solve: | ||||||
| - volumes handling (AWS EBS volume attach/detach issue) | - volumes handling (AWS EBS volume attach/detach issue when using PVC) | ||||||
| - installing plugins with incompatible versions or security vulnerabilities | - installing plugins with incompatible versions or security vulnerabilities | ||||||
| - declarative configuration as code | - better configuration as code | ||||||
| - lack of end to end tests | - lack of end to end tests | ||||||
| - make Jenkins more suitable for dynamic environment and handle graceful shutdown properly | - handle graceful shutdown properly | ||||||
| - security and hardening out of the box | - security and hardening out of the box | ||||||
| - orphaned jobs with no jnlp connection | - orphaned jobs with no jnlp connection | ||||||
| - make errors more visible for end users | - make errors more visible for end users | ||||||
|  | @ -43,7 +46,7 @@ Common: | ||||||
| * documentation | * documentation | ||||||
| * ~~VirtusLab flavored Jenkins theme~~ | * ~~VirtusLab flavored Jenkins theme~~ | ||||||
| * create Jenkins Jobs View for all jobs managed by the operator | * create Jenkins Jobs View for all jobs managed by the operator | ||||||
| * ~~jenkins job for executing groovy scripts~~ | * jenkins job for executing groovy scripts and configuration as code (from ConfigMap) | ||||||
| 
 | 
 | ||||||
| Base configuration: | Base configuration: | ||||||
| * ~~install configuration as a code Jenkins plugin~~ | * ~~install configuration as a code Jenkins plugin~~ | ||||||
|  | @ -51,11 +54,13 @@ Base configuration: | ||||||
| * ~~install~~ and configure Kubernetes plugin (in-progress) | * ~~install~~ and configure Kubernetes plugin (in-progress) | ||||||
| * e2e pipelines using Kubernetes plugin | * e2e pipelines using Kubernetes plugin | ||||||
| * Jenkins hardening, disable insecure options | * Jenkins hardening, disable insecure options | ||||||
|  | * watch other Kubernetes resources by the fixed labels | ||||||
| 
 | 
 | ||||||
| User configuration: | User configuration: | ||||||
| * ~~user reconciliation loop with CR validation~~ | * ~~user reconciliation loop with CR validation~~ | ||||||
| * ~~configure seed jobs and deploy keys~~ | * ~~configure seed jobs and deploy keys~~ | ||||||
| * ~~e2e tests for seed jobs~~ | * ~~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) | * 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) | * backup and restore for Jenkins jobs running as standalone job (AWS, GCP, Azure) | ||||||
| * trigger backup job before pod deletion using preStop k8s hooks | * trigger backup job before pod deletion using preStop k8s hooks | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ This document describes a high level overview how **jenkins-operator** works. | ||||||
| 1. [Architecture and design](#architecture-and-design) | 1. [Architecture and design](#architecture-and-design) | ||||||
| 2. [Operator State](#operator-state) | 2. [Operator State](#operator-state) | ||||||
| 3. [System Jenkins Jobs](#system-jenkins-jobs) | 3. [System Jenkins Jobs](#system-jenkins-jobs) | ||||||
|  | 3. [Jenkins Docker Images](#jenkins-docker-images) | ||||||
| 
 | 
 | ||||||
| ## Architecture and design | ## Architecture and design | ||||||
| 
 | 
 | ||||||
|  | @ -14,13 +15,13 @@ The **jenkins-operator** design incorporates the following concepts: | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
| 
 | 
 | ||||||
| Base reconciliation loop takes care of reconciling base Jenkins configuration, which consists of: | **Base** reconciliation loop takes care of reconciling base Jenkins configuration, which consists of: | ||||||
| - Ensure Manifests - monitors any changes in manifests  | - Ensure Manifests - monitors any changes in manifests  | ||||||
| - Ensure Jenkins Pod - creates and verifies status of Jenkins master Pod | - Ensure Jenkins Pod - creates and verifies status of Jenkins master Pod | ||||||
| - Ensure Jenkins Configuration - configures Jenkins instance including hardening, initial configuration for plugins, etc. | - Ensure Jenkins Configuration - configures Jenkins instance including hardening, initial configuration for plugins, etc. | ||||||
| - Ensure Jenkins API token - generates Jenkins API token and initialized Jenkins client | - Ensure Jenkins API token - generates Jenkins API token and initialized Jenkins client | ||||||
| 
 | 
 | ||||||
| User reconciliation loop takes care of reconciling user provided configuration, which consists of: | **User** reconciliation loop takes care of reconciling user provided configuration, which consists of: | ||||||
| - Ensure Restore Job - creates Restore job and ensures that restore has been successfully performed   | - Ensure Restore Job - creates Restore job and ensures that restore has been successfully performed   | ||||||
| - Ensure Seed Jobs - creates Seed Jobs and ensures that all of them have been successfully executed | - Ensure Seed Jobs - creates Seed Jobs and ensures that all of them have been successfully executed | ||||||
| - Ensure User Configuration - executed user provided configuration, like groovy scripts, configuration as code or plugins | - Ensure User Configuration - executed user provided configuration, like groovy scripts, configuration as code or plugins | ||||||
|  | @ -35,12 +36,17 @@ It helps to maintain or recover desired state even after operator or Jenkins res | ||||||
| 
 | 
 | ||||||
| ## System Jenkins Jobs | ## System Jenkins Jobs | ||||||
| 
 | 
 | ||||||
| The operator or Jenkins instance can be restarted at any time and any operation should not block the reconciliation loop so we implemented | The operator or Jenkins instance can be restarted at any time and any operation should not block the reconciliation loop. | ||||||
| custom jobs API for executing system jobs (seed jobs, groovy scripts, etc.) according to the operator lifecycle. | Taking this into account we implemented custom jobs API for executing system jobs (seed jobs, groovy scripts, etc.) according to the operator lifecycle. | ||||||
| 
 | 
 | ||||||
| Main assumptions are: | Main assumptions are: | ||||||
| - do not block reconciliation loop | - do not block reconciliation loop | ||||||
| - fire job, requeue reconciliation loop and verify status next time | - fire job, requeue reconciliation loop and verify job status next time | ||||||
| - handle retries if case of failure | - handle retries if case of failure | ||||||
| - handle build expiration (deadline) | - handle build expiration (deadline) | ||||||
| - keep state in the custom resource status | - keep state in the custom resource status section | ||||||
|  | 
 | ||||||
|  | ## Jenkins Docker Images | ||||||
|  | 
 | ||||||
|  | **jenkins-operator** is fully compatible with **jenkins:lts** docker image and does not introduce and hidden changes there. | ||||||
|  | In case of need docker image can be easily changed in custom resource manifest as long as it supports standard Jenkins file system structure. | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue