Refactor the Helm chart (#300)

This commit is contained in:
Jakub Al-Khalili 2020-04-01 18:54:27 +02:00 committed by GitHub
parent 970449f04f
commit 52fd4f7f7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 367 additions and 79 deletions

View File

@ -2,5 +2,5 @@ apiVersion: v1
appVersion: "0.3.3"
description: Kubernetes native operator which fully manages Jenkins on Kubernetes
name: jenkins-operator
version: 0.0.8
version: 0.1.0
icon: https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/assets/jenkins-operator-icon.png

View File

@ -0,0 +1,17 @@
{{ if .Values.jenkins.backup.pvc.enabled }}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-backup
namespace: {{ .Values.jenkins.namespace }}
labels:
app: jenkins-operator
jenkins-cr: {{ .Values.jenkins.name }}
spec:
storageClassName: {{ .Values.jenkins.backup.pvc.className }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.jenkins.backup.pvc.size }}
{{ end }}

View File

@ -0,0 +1,20 @@
{{ if .Values.jenkins.configuration.configurationAsCode.content }}
apiVersion: v1
kind: ConfigMap
metadata:
name: jenkins-{{ .Values.jenkins.name }}-casc
namespace: {{ .Values.jenkins.namespace }}
{{- with .Values.jenkins.configuration.configurationAsCode.content }}
data: {{ toYaml . | nindent 2 }}
{{- end }}
{{ end }}
{{ if .Values.jenkins.configuration.groovyScripts.content }}
apiVersion: v1
kind: ConfigMap
metadata:
name: jenkins-{{ .Values.jenkins.name }}-gs
namespace: {{ .Values.jenkins.namespace }}
{{- with .Values.jenkins.configuration.groovyScripts.content }}
data: {{ toYaml . | nindent 2 }}
{{- end }}
{{ end }}

View File

@ -1,8 +0,0 @@
{{ if .Values.jenkins.enabled }}
apiVersion: {{ .Values.jenkins.apiVersion }}
kind: Jenkins
metadata:
name: {{ .Values.jenkins.name }}
spec:
{{- toYaml .Values.jenkins.spec | nindent 4 }}
{{- end }}

View File

@ -0,0 +1,109 @@
{{ if .Values.jenkins.enabled }}
apiVersion: {{ .Values.jenkins.apiVersion }}
kind: Jenkins
metadata:
name: {{ .Values.jenkins.name }}
namespace: {{ .Values.jenkins.namespace }}
spec:
{{- if .Values.jenkins.configuration.configurationAsCode.content }}
configurationAsCode:
configurations:
- name: jenkins-{{ .Values.jenkins.name }}-casc
secret:
{{- if .Values.jenkins.configuration.secretRefName }}
name: {{ .Values.jenkins.configuration.secretRefName }}
{{ else if .Values.jenkins.configuration.secretData }}
name: jenkins-{{ .Values.jenkins.name }}
{{- end }}
{{- end }}
{{- if .Values.jenkins.configuration.groovyScripts.content }}
groovyScripts:
configurations:
- name: jenkins-{{ .Values.jenkins.name }}-gs
secret:
{{- if .Values.jenkins.configuration.secretRefName }}
name: {{ .Values.jenkins.configuration.secretRefName }}
{{ else if .Values.jenkins.configuration.secretData }}
name: jenkins-{{ .Values.jenkins.name }}
{{- end }}
{{- end }}
{{- if .Values.jenkins.backup.enabled }}
backup:
containerName: {{ .Values.jenkins.backup.containerName }}
action:
exec:
{{- with .Values.jenkins.backup.backupCommand }}
command: {{ toYaml . | nindent 8 }}
{{- end }}
interval: {{ .Values.jenkins.backup.interval }}
makeBackupBeforePodDeletion: {{ .Values.jenkins.backup.makeBackupBeforePodDeletion }}
restore:
containerName: {{ .Values.jenkins.backup.containerName }}
action:
exec:
{{- with .Values.jenkins.backup.restoreCommand }}
command: {{ toYaml . | nindent 8 }}
{{- end }}
{{- if .Values.jenkins.backup.recoveryOnce }}
recoveryOnce: {{ .Values.jenkins.backup.recoveryOnce }}
{{- end }}
{{- end }}
{{- with .Values.jenkins.notifications }}
notifications: {{ toYaml . | nindent 4 }}
{{- end }}
master:
{{- with .Values.jenkins.basePlugins }}
basePlugins: {{ toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.jenkins.plugins }}
plugins: {{ toYaml . | nindent 4 }}
{{- end }}
disableCSRFProtection: {{ .Values.jenkins.disableCSRFProtection }}
containers:
- name: {{ .Values.jenkins.name }}-master
image: {{ .Values.jenkins.image }}
imagePullPolicy: {{ .Values.jenkins.imagePullPolicy }}
{{- with .Values.jenkins.imagePullSecrets }}
imagePullSecrets: {{ toYaml . | nindent 10 }}
{{- end }}
livenessProbe:
failureThreshold: 12
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: 80
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 3
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
{{- with .Values.jenkins.resources }}
resources: {{ toYaml . | nindent 10 }}
{{- end }}
{{- if .Values.jenkins.backup.enabled }}
- name: {{ .Values.jenkins.backup.containerName }}
image: {{ .Values.jenkins.backup.image }}
imagePullPolicy: IfNotPresent
{{- with .Values.jenkins.backup.env }}
env: {{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.jenkins.backup.volumeMounts }}
volumeMounts: {{- toYaml . | nindent 8 }}
{{- end }}
{{- end }}
{{- with .Values.jenkins.volumes }}
volumes: {{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.jenkins.seedJobs }}
seedJobs: {{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}

View File

@ -5,7 +5,7 @@ metadata:
labels:
{{ include "jenkins-operator.labels" . | indent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
replicas: {{ .Values.operator.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "jenkins-operator.name" . }}
@ -17,14 +17,14 @@ spec:
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: jenkins-operator
{{- with .Values.imagePullSecrets }}
{{- with .Values.operator.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
image: {{ .Values.operator.image }}
imagePullPolicy: {{ .Values.operator.imagePullPolicy }}
ports:
- name: http
containerPort: 80
@ -44,16 +44,16 @@ spec:
- name: OPERATOR_NAME
value: "jenkins-operator"
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}
{{- toYaml .Values.operator.resources | nindent 12 }}
{{- with .Values.operator.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
{{- with .Values.operator.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
{{- with .Values.operator.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@ -0,0 +1,11 @@
{{ if and (eq .Values.jenkins.configuration.secretRefName "") (.Values.jenkins.configuration.secretData) }}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: jenkins-{{ .Values.jenkins.name }}
namespace: {{ .Values.jenkins.namespace }}
{{- with .Values.jenkins.configuration.secretData }}
data: {{ toYaml . | nindent 2 }}
{{- end }}
{{ end }}

View File

@ -1,70 +1,209 @@
# Default values for jenkins-operator.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
repository: virtuslab/jenkins-operator
tag: v0.3.3
pullPolicy: IfNotPresent
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
# Jenkins Operator Helm chart
# Jenkins instance configuration
jenkins:
# enabled can enable or disable the Jenkins instance
# Set to false if you have configured CR already and/or you want to deploy an operator only
enabled: true
# apiVersion is the version of the CR manifest
# The recommended and default value is "jenkins.io/v1alpha2"
# See https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/v0.1.x/migration-guide-v1alpha1-to-v1alpha2/ for more migration guide
apiVersion: jenkins.io/v1alpha2
name: example
spec:
master:
containers:
- name: jenkins-master
image: jenkins/jenkins:lts
imagePullPolicy: Always
livenessProbe:
failureThreshold: 12
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: 80
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 3
httpGet:
path: /login
port: http
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
cpu: 1500m
memory: 3Gi
requests:
cpu: "1"
memory: 500Mi
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
# name of resource
# The pod name will be jenkins-<name> (name will be set as suffix)
name: jenkins
nodeSelector: {}
# namespace is the namespace where the resources will be deployed
# It's not recommended to use default namespace
# Create new namespace for jenkins (called e.g. jenkins)
namespace: default
tolerations: []
# image is the name (and tag) of the Jenkins instance
# Default: jenkins/jenkins:lts
# It's recommended to use LTS (tag: "lts") version
image: jenkins/jenkins:lts
affinity: {}
# imagePullPolicy defines policy for pulling images
imagePullPolicy: Always
# disableCSRFProtection can enable or disable operator built-in CSRF protection
# Set it to true if you are using OpenShift Jenkins Plugin
# See https://github.com/jenkinsci/kubernetes-operator/pull/193 for more info
disableCSRFProtection: false
# imagePullSecrets is used if you want to pull images from private repository
# See https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration/#pulling-docker-images-from-private-repositories for more info
imagePullSecrets: []
# notifications is feature that notify user about Jenkins reconcilation status
# See https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/notifications/ for more info
notifications: []
# basePlugins are plugins installed and required by the operator
# Shouldn't contain plugins defined by user
# You can change their versions here
# See https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/customization/#install-plugins for more details
#
# Example:
#
# basePlugins:
# - name: kubernetes
# version: 1.18.3
# - name: workflow-job
# version: "2.34"
# - name: workflow-aggregator
# version: "2.6"
# - name: git
# version: 3.12.0
# - name: job-dsl
# version: "1.76"
# - name: configuration-as-code
# version: "1.29"
# - name: configuration-as-code-support
# version: "1.19"
# - name: kubernetes-credentials-provider
# version: 0.12.1
basePlugins: []
# plugins are plugins required by the user
# You can define plugins here
# See https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/customization/#install-plugins for more details
#
# Example:
#
# plugins:
# - name: simple-theme-plugin
# version: 0.5.1
plugins: []
# seedJobs is placeholder for jenkins seed jobs
# For seed job creation tutorial, check https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration/#prepare-job-definitions-and-pipelines
# See https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configuration/#configure-seed-jobs for additional info
# Example:
#
# seedJobs:
# - id: jenkins-operator
# targets: "cicd/jobs/*.jenkins"
# description: "Jenkins Operator repository"
# repositoryBranch: master
# repositoryUrl: https://github.com/jenkinsci/kubernetes-operator.git
seedJobs: []
# Resource limit/request for Jenkins
# See https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ for details
resources:
limits:
cpu: 1500m
memory: 3Gi
requests:
cpu: 1
memory: 500Mi
# volumes used by Jenkins
# By default, we are only using backup
volumes:
- name: backup # PVC volume where backups will be stored
persistentVolumeClaim:
claimName: jenkins-backup
# backup is section for configuring operator's backup feature
# By default backup feature is enabled and pre-configured
# This section simplifies the configuration described here: https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/configure-backup-and-restore/
# For customization tips see https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/custom-backup-and-restore/
backup:
# enabled is enable/disable switch for backup feature
# By default the feature is enabled
enabled: true
# image used by backup feature
# By default using prebuilt backup PVC image by VirtusLab
image: virtuslab/jenkins-operator-backup-pvc:v0.0.8
# containerName is backup container name
containerName: backup
# interval defines how often make backup in seconds
interval: 30
# makeBackupBeforePodDeletion when enabled will make backup before pod deletion
makeBackupBeforePodDeletion: true
# backupCommand is backup container command
backupCommand:
- /home/user/bin/backup.sh
# restoreCommand is backup restore command
restoreCommand:
- /home/user/bin/restore.sh
# pvc is Persistent Volume Claim Kubernetes resource
pvc:
# enabled is enable/disable switch for PVC
enabled: true
# size is size of PVC
size: 5Gi
# className is storageClassName for PVC
# See https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1 for more details
className: ""
# env contains container environment variables
# PVC backup provider handles these variables:
# BACKUP_DIR - path for storing backup files (default: "/backup")
# JENKINS_HOME - path to jenkins home (default: "/jenkins-home")
# BACKUP_COUNT - define how much recent backups will be kept
env:
- name: BACKUP_DIR
value: /backup
- name: JENKINS_HOME
value: /jenkins-home
- name: BACKUP_COUNT
value: "3" # keep only the 3 most recent backups
# volumeMounts holds the mount points for volumes
volumeMounts:
- name: jenkins-home
mountPath: /jenkins-home # Jenkins home volume
- mountPath: /backup # backup volume
name: backup
# configuration is section where we can configure Jenkins instance
# See https://jenkinsci.github.io/kubernetes-operator/docs/getting-started/latest/customization/ for details
configuration:
configurationAsCode:
content: {}
groovyScripts:
content: {}
# secretRefName of existing secret (previously created)
secretRefName: ""
# secretData creates new secret if secretRefName is empty and fills with data provided in secretData
secretData: {}
# operator is section for configuring operator deployment
operator:
replicaCount: 1
# image is the name (and tag) of the Jenkins Operator image
image: virtuslab/jenkins-operator:v0.3.3
# imagePullPolicy defines policy for pulling images
imagePullPolicy: IfNotPresent
# imagePullSecrets is used if you want to pull images from private repository
imagePullSecrets: []
# nameOverride overrides the app name
nameOverride: ""
# fullnameOverride overrides the deployment name
fullnameOverride: ""
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}