From e06412832cfcf15d3a18e8319d8883f8fbbcb7d4 Mon Sep 17 00:00:00 2001 From: Marcin-Ramotowski Date: Thu, 5 Jun 2025 19:25:43 +0000 Subject: [PATCH] Added configuration to deploy Jenkins in Kubernetes --- deployment.yaml | 57 +++++++++++++++++++++++++++++++++++++++++++++ ingress.yaml | 20 ++++++++++++++++ namespace.yaml | 5 ++++ service.yaml | 17 ++++++++++++++ serviceAccount.yaml | 28 ++++++++++++++++++++++ volume.yaml | 45 +++++++++++++++++++++++++++++++++++ 6 files changed, 172 insertions(+) create mode 100644 deployment.yaml create mode 100644 ingress.yaml create mode 100644 namespace.yaml create mode 100644 service.yaml create mode 100644 serviceAccount.yaml create mode 100644 volume.yaml diff --git a/deployment.yaml b/deployment.yaml new file mode 100644 index 0000000..b77b965 --- /dev/null +++ b/deployment.yaml @@ -0,0 +1,57 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: deployment-jenkins + namespace: jenkins +spec: + replicas: 1 + selector: + matchLabels: + app: server-jenkins + template: + metadata: + labels: + app: server-jenkins + spec: + securityContext: + fsGroup: 1000 + runAsUser: 1000 + serviceAccountName: admin-jenkins + containers: + - name: deployment-jenkins + image: jenkins/jenkins:lts + resources: + limits: + memory: "2Gi" + cpu: "1000m" + requests: + memory: "500Mi" + cpu: "500m" + ports: + - name: httpport + containerPort: 8080 + - name: jnlpport + containerPort: 50000 + livenessProbe: + httpGet: + path: "/login" + port: 8080 + initialDelaySeconds: 90 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 5 + readinessProbe: + httpGet: + path: "/login" + port: 8080 + initialDelaySeconds: 60 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 3 + volumeMounts: + - name: data-jenkins + mountPath: /var/jenkins_home + volumes: + - name: data-jenkins + persistentVolumeClaim: + claimName: pvc-jenkins diff --git a/ingress.yaml b/ingress.yaml new file mode 100644 index 0000000..7284458 --- /dev/null +++ b/ingress.yaml @@ -0,0 +1,20 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: jenkins-ingress + namespace: jenkins + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + ingressClassName: nginx + rules: + - host: jenkins.marcin00.pl + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: service-jenkins + port: + number: 32000 diff --git a/namespace.yaml b/namespace.yaml new file mode 100644 index 0000000..58de407 --- /dev/null +++ b/namespace.yaml @@ -0,0 +1,5 @@ +# Namespace (opcjonalnie) +apiVersion: v1 +kind: Namespace +metadata: + name: jenkins diff --git a/service.yaml b/service.yaml new file mode 100644 index 0000000..8204fa9 --- /dev/null +++ b/service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: service-jenkins + namespace: jenkins + annotations: + prometheus.io/scrape: 'true' + prometheus.io/path: / + prometheus.io/port: '8080' +spec: + selector: + app: server-jenkins + type: NodePort + ports: + - port: 8080 + targetPort: 8080 + nodePort: 32000 diff --git a/serviceAccount.yaml b/serviceAccount.yaml new file mode 100644 index 0000000..d9c3f86 --- /dev/null +++ b/serviceAccount.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: admin-jenkins +rules: + - apiGroups: [""] + resources: ["*"] + verbs: ["*"] +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: admin-jenkins + namespace: jenkins +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: admin-jenkins +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: admin-jenkins +subjects: +- kind: ServiceAccount + name: admin-jenkins + namespace: jenkins diff --git a/volume.yaml b/volume.yaml new file mode 100644 index 0000000..011fbab --- /dev/null +++ b/volume.yaml @@ -0,0 +1,45 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: local-storage +provisioner: kubernetes.io/no-provisioner +volumeBindingMode: WaitForFirstConsumer +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: pv-jenkins + labels: + type: local +spec: + storageClassName: localstorage + claimRef: + name: pvc-jenkins + namespace: jenkins + capacity: + storage: 2Gi + accessModes: + - ReadWriteOnce + local: + path: /mnt + nodeAffinity: + required: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/hostname + operator: In + values: + - aks-agentpool-14525846-vmss000000 +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-jenkins + namespace: jenkins +spec: + storageClassName: localstorage + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi