commit
						51fbb0eaa9
					
				
							
								
								
									
										10
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										10
									
								
								Makefile
								
								
								
								
							|  | @ -454,3 +454,13 @@ else | ||||||
| 	sudo minikube start --vm-driver=none --kubernetes-version=$(MINIKUBE_KUBERNETES_VERSION) | 	sudo minikube start --vm-driver=none --kubernetes-version=$(MINIKUBE_KUBERNETES_VERSION) | ||||||
| 	sudo chown -R travis: /home/travis/.minikube/ | 	sudo chown -R travis: /home/travis/.minikube/ | ||||||
| endif | endif | ||||||
|  | 
 | ||||||
|  | .PHONY: helm-package | ||||||
|  | helm-package: | ||||||
|  | 	@echo "+ $@" | ||||||
|  | 	cd chart/ && helm package jenkins-operator | ||||||
|  | 
 | ||||||
|  | .PHONY: helm-deploy | ||||||
|  | helm-deploy: helm-package | ||||||
|  | 	@echo "+ $@" | ||||||
|  | 	helm repo index chart/ --url https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/jenkins-operator/ | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | apiVersion: v1 | ||||||
|  | entries: | ||||||
|  |   jenkins-operator: | ||||||
|  |   - apiVersion: v1 | ||||||
|  |     appVersion: 0.2.0 | ||||||
|  |     created: "2019-09-18T12:05:07.80241+02:00" | ||||||
|  |     description: Kubernetes native operator which fully manages Jenkins on Kubernetes | ||||||
|  |     digest: 17d48e5da2a77975cc5d9c4db3d28f003d578759f8538bf58ac3977534feb42f | ||||||
|  |     name: jenkins-operator | ||||||
|  |     urls: | ||||||
|  |     - https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart/jenkins-operator/jenkins-operator-0.0.1.tgz | ||||||
|  |     version: 0.0.1 | ||||||
|  | generated: "2019-09-18T12:05:07.801225+02:00" | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | # Patterns to ignore when building packages. | ||||||
|  | # This supports shell glob matching, relative path matching, and | ||||||
|  | # negation (prefixed with !). Only one pattern per line. | ||||||
|  | .DS_Store | ||||||
|  | # Common VCS dirs | ||||||
|  | .git/ | ||||||
|  | .gitignore | ||||||
|  | .bzr/ | ||||||
|  | .bzrignore | ||||||
|  | .hg/ | ||||||
|  | .hgignore | ||||||
|  | .svn/ | ||||||
|  | # Common backup files | ||||||
|  | *.swp | ||||||
|  | *.bak | ||||||
|  | *.tmp | ||||||
|  | *~ | ||||||
|  | # Various IDEs | ||||||
|  | .project | ||||||
|  | .idea/ | ||||||
|  | *.tmproj | ||||||
|  | .vscode/ | ||||||
|  | @ -0,0 +1,5 @@ | ||||||
|  | apiVersion: v1 | ||||||
|  | appVersion: "0.2.0" | ||||||
|  | description: Kubernetes native operator which fully manages Jenkins on Kubernetes | ||||||
|  | name: jenkins-operator | ||||||
|  | version: 0.0.1 | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | 1. Watch Jenkins instance being created: | ||||||
|  | $ kubectl --namespace {{ .Release.Namespace }} get pods -w | ||||||
|  | 
 | ||||||
|  | 2. Get Jenkins credentials: | ||||||
|  | $ kubectl --namespace {{ .Release.Namespace }} get secret jenkins-operator-credentials-{{ .Values.jenkins.name }} -o 'jsonpath={.data.user}' | base64 -d | ||||||
|  | $ kubectl --namespace {{ .Release.Namespace }} get secret jenkins-operator-credentials-{{ .Values.jenkins.name }} -o 'jsonpath={.data.password}' | base64 -d | ||||||
|  | 
 | ||||||
|  | 3. Connect to Jenkins (actual Kubernetes cluster): | ||||||
|  | $ kubectl --namespace {{ .Release.Namespace }} port-forward jenkins-{{ .Values.jenkins.name }} 8080:8080 | ||||||
|  | 
 | ||||||
|  | Now open the browser and enter http://localhost:8080 | ||||||
|  | @ -0,0 +1,45 @@ | ||||||
|  | {{/* vim: set filetype=mustache: */}} | ||||||
|  | {{/* | ||||||
|  | Expand the name of the chart. | ||||||
|  | */}} | ||||||
|  | {{- define "jenkins-operator.name" -}} | ||||||
|  | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} | ||||||
|  | {{- end -}} | ||||||
|  | 
 | ||||||
|  | {{/* | ||||||
|  | Create a default fully qualified app name. | ||||||
|  | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). | ||||||
|  | If release name contains chart name it will be used as a full name. | ||||||
|  | */}} | ||||||
|  | {{- define "jenkins-operator.fullname" -}} | ||||||
|  | {{- if .Values.fullnameOverride -}} | ||||||
|  | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} | ||||||
|  | {{- else -}} | ||||||
|  | {{- $name := default .Chart.Name .Values.nameOverride -}} | ||||||
|  | {{- if contains $name .Release.Name -}} | ||||||
|  | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} | ||||||
|  | {{- else -}} | ||||||
|  | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} | ||||||
|  | {{- end -}} | ||||||
|  | {{- end -}} | ||||||
|  | {{- end -}} | ||||||
|  | 
 | ||||||
|  | {{/* | ||||||
|  | Create chart name and version as used by the chart label. | ||||||
|  | */}} | ||||||
|  | {{- define "jenkins-operator.chart" -}} | ||||||
|  | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} | ||||||
|  | {{- end -}} | ||||||
|  | 
 | ||||||
|  | {{/* | ||||||
|  | Common labels | ||||||
|  | */}} | ||||||
|  | {{- define "jenkins-operator.labels" -}} | ||||||
|  | app.kubernetes.io/name: {{ include "jenkins-operator.name" . }} | ||||||
|  | helm.sh/chart: {{ include "jenkins-operator.chart" . }} | ||||||
|  | app.kubernetes.io/instance: {{ .Release.Name }} | ||||||
|  | {{- if .Chart.AppVersion }} | ||||||
|  | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} | ||||||
|  | {{- end }} | ||||||
|  | app.kubernetes.io/managed-by: {{ .Release.Service }} | ||||||
|  | {{- end -}} | ||||||
|  | @ -0,0 +1,59 @@ | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: {{ include "jenkins-operator.fullname" . }} | ||||||
|  |   labels: | ||||||
|  | {{ include "jenkins-operator.labels" . | indent 4 }} | ||||||
|  | spec: | ||||||
|  |   replicas: {{ .Values.replicaCount }} | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: {{ include "jenkins-operator.name" . }} | ||||||
|  |       app.kubernetes.io/instance: {{ .Release.Name }} | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: | ||||||
|  |         app.kubernetes.io/name: {{ include "jenkins-operator.name" . }} | ||||||
|  |         app.kubernetes.io/instance: {{ .Release.Name }} | ||||||
|  |     spec: | ||||||
|  |       serviceAccountName: jenkins-operator | ||||||
|  |     {{- with .Values.imagePullSecrets }} | ||||||
|  |       imagePullSecrets: | ||||||
|  |         {{- toYaml . | nindent 8 }} | ||||||
|  |     {{- end }} | ||||||
|  |       containers: | ||||||
|  |         - name: {{ .Chart.Name }} | ||||||
|  |           image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" | ||||||
|  |           imagePullPolicy: {{ .Values.image.pullPolicy }} | ||||||
|  |           ports: | ||||||
|  |             - name: http | ||||||
|  |               containerPort: 80 | ||||||
|  |               protocol: TCP | ||||||
|  |           command: | ||||||
|  |             - jenkins-operator | ||||||
|  |           args: [] | ||||||
|  |           env: | ||||||
|  |             - name: WATCH_NAMESPACE | ||||||
|  |               valueFrom: | ||||||
|  |                 fieldRef: | ||||||
|  |                   fieldPath: metadata.namespace | ||||||
|  |             - name: POD_NAME | ||||||
|  |               valueFrom: | ||||||
|  |                 fieldRef: | ||||||
|  |                   fieldPath: metadata.name | ||||||
|  |             - name: OPERATOR_NAME | ||||||
|  |               value: "jenkins-operator" | ||||||
|  |           resources: | ||||||
|  |             {{- toYaml .Values.resources | nindent 12 }} | ||||||
|  |       {{- with .Values.nodeSelector }} | ||||||
|  |       nodeSelector: | ||||||
|  |         {{- toYaml . | nindent 8 }} | ||||||
|  |       {{- end }} | ||||||
|  |     {{- with .Values.affinity }} | ||||||
|  |       affinity: | ||||||
|  |         {{- toYaml . | nindent 8 }} | ||||||
|  |     {{- end }} | ||||||
|  |     {{- with .Values.tolerations }} | ||||||
|  |       tolerations: | ||||||
|  |         {{- toYaml . | nindent 8 }} | ||||||
|  |     {{- end }} | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | apiVersion: {{ .Values.jenkins.apiVersion }} | ||||||
|  | kind: Jenkins | ||||||
|  | metadata: | ||||||
|  |   name: {{ .Values.jenkins.name }} | ||||||
|  | spec: | ||||||
|  |         {{- toYaml .Values.jenkins.spec | nindent 4 }} | ||||||
|  | @ -0,0 +1,19 @@ | ||||||
|  | apiVersion: apiextensions.k8s.io/v1beta1 | ||||||
|  | kind: CustomResourceDefinition | ||||||
|  | metadata: | ||||||
|  |     name: jenkins.jenkins.io | ||||||
|  | spec: | ||||||
|  |     group: jenkins.io | ||||||
|  |     names: | ||||||
|  |         kind: Jenkins | ||||||
|  |         listKind: JenkinsList | ||||||
|  |         plural: jenkins | ||||||
|  |         singular: jenkins | ||||||
|  |     scope: Namespaced | ||||||
|  |     versions: | ||||||
|  |         - name : v1alpha2 | ||||||
|  |           served: true | ||||||
|  |           storage: true | ||||||
|  |         - name : v1alpha1 | ||||||
|  |           served: true | ||||||
|  |           storage: false | ||||||
|  | @ -0,0 +1,93 @@ | ||||||
|  | --- | ||||||
|  | kind: Role | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: jenkins-operator | ||||||
|  | rules: | ||||||
|  |   - apiGroups: | ||||||
|  |       - "" | ||||||
|  |     resources: | ||||||
|  |       - services | ||||||
|  |       - configmaps | ||||||
|  |       - secrets | ||||||
|  |     verbs: | ||||||
|  |       - get | ||||||
|  |       - create | ||||||
|  |       - update | ||||||
|  |       - list | ||||||
|  |       - watch | ||||||
|  |   - apiGroups: | ||||||
|  |       - apps | ||||||
|  |     resources: | ||||||
|  |       - deployments | ||||||
|  |       - daemonsets | ||||||
|  |       - replicasets | ||||||
|  |       - statefulsets | ||||||
|  |     verbs: | ||||||
|  |       - '*' | ||||||
|  |   - apiGroups: | ||||||
|  |       - "" | ||||||
|  |     resources: | ||||||
|  |       - serviceaccounts | ||||||
|  |     verbs: | ||||||
|  |       - create | ||||||
|  |   - apiGroups: | ||||||
|  |       - rbac.authorization.k8s.io | ||||||
|  |     resources: | ||||||
|  |       - roles | ||||||
|  |       - rolebindings | ||||||
|  |     verbs: | ||||||
|  |       - create | ||||||
|  |       - update | ||||||
|  |   - apiGroups: | ||||||
|  |       - "" | ||||||
|  |     resources: | ||||||
|  |       - pods/portforward | ||||||
|  |     verbs: | ||||||
|  |       - create | ||||||
|  |   - apiGroups: | ||||||
|  |       - "" | ||||||
|  |     resources: | ||||||
|  |       - pods/log | ||||||
|  |     verbs: | ||||||
|  |       - get | ||||||
|  |       - list | ||||||
|  |       - watch | ||||||
|  |   - apiGroups: | ||||||
|  |       - "" | ||||||
|  |     resources: | ||||||
|  |       - pods | ||||||
|  |       - pods/exec | ||||||
|  |     verbs: | ||||||
|  |       - "*" | ||||||
|  |   - apiGroups: | ||||||
|  |       - "" | ||||||
|  |     resources: | ||||||
|  |       - events | ||||||
|  |     verbs: | ||||||
|  |       - watch | ||||||
|  |       - list | ||||||
|  |       - create | ||||||
|  |       - patch | ||||||
|  |   - apiGroups: | ||||||
|  |       - apps | ||||||
|  |     resourceNames: | ||||||
|  |       - jenkins-operator | ||||||
|  |     resources: | ||||||
|  |       - deployments/finalizers | ||||||
|  |     verbs: | ||||||
|  |       - update | ||||||
|  |   - apiGroups: | ||||||
|  |       - jenkins.io | ||||||
|  |     resources: | ||||||
|  |       - '*' | ||||||
|  |     verbs: | ||||||
|  |       - '*' | ||||||
|  |   - apiGroups: | ||||||
|  |       - "" | ||||||
|  |     resources: | ||||||
|  |       - persistentvolumeclaims | ||||||
|  |     verbs: | ||||||
|  |       - get | ||||||
|  |       - list | ||||||
|  |       - watch | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | --- | ||||||
|  | kind: RoleBinding | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: jenkins-operator | ||||||
|  | subjects: | ||||||
|  | - kind: ServiceAccount | ||||||
|  |   name: jenkins-operator | ||||||
|  | roleRef: | ||||||
|  |   kind: Role | ||||||
|  |   name: jenkins-operator | ||||||
|  |   apiGroup: rbac.authorization.k8s.io | ||||||
|  | @ -0,0 +1,5 @@ | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ServiceAccount | ||||||
|  | metadata: | ||||||
|  |   name: jenkins-operator | ||||||
|  | @ -0,0 +1,69 @@ | ||||||
|  | # 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.2.0 | ||||||
|  |   pullPolicy: IfNotPresent | ||||||
|  | 
 | ||||||
|  | imagePullSecrets: [] | ||||||
|  | nameOverride: "" | ||||||
|  | fullnameOverride: "" | ||||||
|  | 
 | ||||||
|  | jenkins: | ||||||
|  |     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 | ||||||
|  | 
 | ||||||
|  | nodeSelector: {} | ||||||
|  | 
 | ||||||
|  | tolerations: [] | ||||||
|  | 
 | ||||||
|  | affinity: {} | ||||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue