Update docs
This commit is contained in:
		
							parent
							
								
									4eb5cba369
								
							
						
					
					
						commit
						b344e64745
					
				
							
								
								
									
										19
									
								
								README.md
								
								
								
								
							
							
						
						
									
										19
									
								
								README.md
								
								
								
								
							|  | @ -25,6 +25,7 @@ Some of the problems we want to solve: | ||||||
| - 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 | ||||||
|  | - backup and restore for jobs history | ||||||
| 
 | 
 | ||||||
| ## Documentation | ## Documentation | ||||||
| 
 | 
 | ||||||
|  | @ -41,27 +42,13 @@ Feel free to file [issues](https://github.com/VirtusLab/jenkins-operator/issues) | ||||||
| 
 | 
 | ||||||
| Common: | Common: | ||||||
| * simple API for generating Kubernetes events using one common format | * 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 | * create Jenkins Jobs View for all jobs managed by the operator | ||||||
| * jenkins job for executing groovy scripts and configuration as code (from ConfigMap) | * code clean up and more tests | ||||||
| 
 | 
 | ||||||
| Base configuration: | 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 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) | * 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 | ||||||
| * verify Jenkins configuration events | * verify Jenkins configuration events | ||||||
|  |  | ||||||
|  | @ -69,8 +69,83 @@ kubectl jenkins-operator-example 8080:8080 | ||||||
| Jenkins operator uses [job-dsl][job-dsl] and [ssh-credentials][ssh-credentials] plugins for configuring seed jobs | Jenkins operator uses [job-dsl][job-dsl] and [ssh-credentials][ssh-credentials] plugins for configuring seed jobs | ||||||
| and deploy keys. | and deploy keys. | ||||||
| 
 | 
 | ||||||
|  | ## Prepare job definitions and pipelines | ||||||
| 
 | 
 | ||||||
| It can be configured using `Jenkins.spec.seedJobs` section from custom resource manifest: | First you have to prepare pipelines and job definition in your GitHub repository using the following structure: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | cicd/ | ||||||
|  | ├── jobs | ||||||
|  | │   └── build.jenkins | ||||||
|  | └── pipelines | ||||||
|  |     └── build.jenkins | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | **cicd/jobs/build.jenkins** it's a job definition: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | #!/usr/bin/env groovy | ||||||
|  | 
 | ||||||
|  | pipelineJob('build-jenkins-operator') { | ||||||
|  |     displayName('Build jenkins-operator') | ||||||
|  | 
 | ||||||
|  |     definition { | ||||||
|  |         cpsScm { | ||||||
|  |             scm { | ||||||
|  |                 git { | ||||||
|  |                     remote { | ||||||
|  |                         url('https://github.com/VirtusLab/jenkins-operator.git') | ||||||
|  |                         credentials('jenkins-operator') | ||||||
|  |                     } | ||||||
|  |                     branches('*/master') | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             scriptPath('cicd/pipelines/build.jenkins') | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | **cicd/jobs/build.jenkins** it's an actual Jenkins pipeline: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | #!/usr/bin/env groovy | ||||||
|  | 
 | ||||||
|  | def label = "build-jenkins-operator-${UUID.randomUUID().toString()}" | ||||||
|  | def home = "/home/jenkins" | ||||||
|  | def workspace = "${home}/workspace/build-jenkins-operator" | ||||||
|  | def workdir = "${workspace}/src/github.com/VirtusLab/jenkins-operator/" | ||||||
|  | 
 | ||||||
|  | podTemplate(label: label, | ||||||
|  |         containers: [ | ||||||
|  |                 containerTemplate(name: 'jnlp', image: 'jenkins/jnlp-slave:alpine'), | ||||||
|  |                 containerTemplate(name: 'go', image: 'golang:1-alpine', command: 'cat', ttyEnabled: true), | ||||||
|  |         ]) { | ||||||
|  | 
 | ||||||
|  |     node(label) { | ||||||
|  |         dir(workdir) { | ||||||
|  |             stage('Init') { | ||||||
|  |                 timeout(time: 3, unit: 'MINUTES') { | ||||||
|  |                     checkout scm | ||||||
|  |                 } | ||||||
|  |                 container('go') { | ||||||
|  |                     sh 'apk --no-cache --update add make git gcc libc-dev' | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             stage('Build') { | ||||||
|  |                 container('go') { | ||||||
|  |                     sh 'make build' | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## Configure Seed Jobs | ||||||
|  | 
 | ||||||
|  | Jenkins Seed Jobs are configured using `Jenkins.spec.seedJobs` section from your custom resource manifest: | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
| apiVersion: virtuslab.com/v1alpha1 | apiVersion: virtuslab.com/v1alpha1 | ||||||
|  | @ -79,20 +154,38 @@ metadata: | ||||||
|   name: example |   name: example | ||||||
| spec: | spec: | ||||||
|   master: |   master: | ||||||
|    image: jenkins/jenkins |    image: jenkins/jenkins:lts | ||||||
|   seedJobs: |   seedJobs: | ||||||
|   - id: jenkins-operator |   - id: jenkins-operator | ||||||
|     targets: "cicd/jobs/*.jenkins" |     targets: "cicd/jobs/*.jenkins" | ||||||
|     description: "Jenkins Operator e2e tests repository" |     description: "Jenkins Operator repository" | ||||||
|     repositoryBranch: master |     repositoryBranch: master | ||||||
|     repositoryUrl: git@github.com:VirtusLab/jenkins-operator-e2e.git |     repositoryUrl: https://github.com/VirtusLab/jenkins-operator.git | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | If your GitHub repository is **private** you have to configure corresponding **privateKey** and Kubernetes Secret: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | apiVersion: virtuslab.com/v1alpha1 | ||||||
|  | kind: Jenkins | ||||||
|  | metadata: | ||||||
|  |   name: example | ||||||
|  | spec: | ||||||
|  |   master: | ||||||
|  |    image: jenkins/jenkins:lts | ||||||
|  |   seedJobs: | ||||||
|  |   - id: jenkins-operator | ||||||
|  |     targets: "cicd/jobs/*.jenkins" | ||||||
|  |     description: "Jenkins Operator repository" | ||||||
|  |     repositoryBranch: master | ||||||
|  |     repositoryUrl: git@github.com:VirtusLab/jenkins-operator.git | ||||||
|     privateKey: |     privateKey: | ||||||
|       secretKeyRef: |       secretKeyRef: | ||||||
|         name: deploy-keys |         name: deploy-keys | ||||||
|         key: jenkins-operator-e2e |         key: jenkins-operator | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| And corresponding Kubernetes Secret (in the same namespace) with private key: | And Kubernetes Secret: | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
|  | @ -107,31 +200,15 @@ data: | ||||||
|     ... |     ... | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| If your GitHub repository is public, you don't have to configure `privateKey` and create Kubernetes Secret: | **jenkins-operator** will automatically discover and configure all seed jobs. | ||||||
| 
 |  | ||||||
| ``` |  | ||||||
| apiVersion: virtuslab.com/v1alpha1 |  | ||||||
| kind: Jenkins |  | ||||||
| metadata: |  | ||||||
|   name: example |  | ||||||
| spec: |  | ||||||
|   master: |  | ||||||
|    image: jenkins/jenkins |  | ||||||
|   seedJobs: |  | ||||||
|   - id: jenkins-operator-e2e |  | ||||||
|     targets: "cicd/jobs/*.jenkins" |  | ||||||
|     description: "Jenkins Operator e2e tests repository" |  | ||||||
|     repositoryBranch: master |  | ||||||
|     repositoryUrl: https://github.com/VirtusLab/jenkins-operator-e2e.git |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Jenkins operator will automatically configure and trigger Seed Job Pipeline for all entries from `Jenkins.spec.seedJobs`. |  | ||||||
| 
 | 
 | ||||||
| ## Install Plugins | ## Install Plugins | ||||||
| 
 | 
 | ||||||
| ## Configure Authorization | ## Configure Authorization | ||||||
| 
 | 
 | ||||||
| ## Configure Backup & Restore | ## Configure Backup & Restore (work in progress) | ||||||
|  | 
 | ||||||
|  | Not implemented yet. | ||||||
| 
 | 
 | ||||||
| ## Debugging | ## Debugging | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue