# Copyright 2019 Google LLC
#
# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://llvm.org/LICENSE.txt
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

---
apiVersion: v1
kind: Namespace
metadata: 
  name: jenkins
  labels: 
    name: jenkins
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: jenkins
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: jenkins-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: default
    namespace: jenkins
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-home
  labels:
    failure-domain.beta.kubernetes.io/zone: us-central1-a
spec:
  capacity:
    storage: 20Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  gcePersistentDisk:
    pdName: jenkins-home
    fsType: ext4
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
  namespace: jenkins
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: master
    spec:
      hostname: jenkins-master
      containers:
      - name: master
        image: jenkins/jenkins:lts
        ports:
        - containerPort: 8080
        - containerPort: 50000
        readinessProbe:
          httpGet:
            path: /login
            port: 8080
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 2
          failureThreshold: 5
        env:
        - name: JAVA_OPTS
          value: '-Xmx1400m'
        volumeMounts:
        - mountPath: /var/jenkins_home
          name: jenkins-home
        resources:
          limits:
            cpu: 500m
            memory: 1500Mi
          requests:
            cpu: 500m
            memory: 1500Mi
      volumes:
      - name: jenkins-home
        gcePersistentDisk:
          pdName: jenkins-home
          fsType: ext4
      nodeSelector:
        cloud.google.com/gke-nodepool: default-pool
---
kind: Service
apiVersion: v1
metadata:
  name: jenkins-ui
  namespace: jenkins
spec:
  type: NodePort
  selector:
    app: master
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      name: ui
    - protocol: TCP
      port: 50000
      targetPort: 50000
      name: agent
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-jenkins
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteMany
  nfs:
    server: nfs-service.results.svc.cluster.local
    path: "/exports"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfs-jenkins
  namespace: jenkins
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10Gi  
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: agent-debian-testing-ssd
  namespace: jenkins
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: agent-debian-testing-ssd
    spec:
      containers:
      - name: agent-debian-testing-clang8
        image: gcr.io/llvm-premerge-checks/agent-debian-testing-ssd
        ports:
        - containerPort: 22
        resources:
          limits:
            cpu: 30
            memory: 45Gi
          requests:
            cpu: 30
            memory: 45Gi
        volumeMounts:
        - name: nfs-pvc
          mountPath: /mnt/nfs          
        - name: ssd 
          mountPath: /mnt/disks/ssd0
        - mountPath: /github-ssh-key
          name: github-ssh-key
      volumes:
      - name: nfs-pvc
        persistentVolumeClaim:
          claimName: nfs-jenkins
      - name: ssd
        hostPath:
          # directory location on host
          path: /mnt/disks/ssd0
          type: Directory          
      - name: github-ssh-key
        secret:
          secretName: github-ssh-key
      nodeSelector:
        cloud.google.com/gke-nodepool: jenkins-agents