{
  "kind": "Template",
  "apiVersion": "v1",
  "metadata": {
    "name": "jenkins-persistent",
    "annotations": {
      "openshift.io/display-name": "Jenkins (Persistent)",
      "description": "Jenkins service, with persistent storage.\n\nNOTE: You must have persistent volumes available in your cluster to use this template.",
      "iconClass": "icon-jenkins",
      "tags": "instant-app,jenkins",
      "template.openshift.io/long-description": "This template deploys a Jenkins server capable of managing OpenShift Pipeline builds and supporting OpenShift-based oauth login.",
      "template.openshift.io/provider-display-name": "Red Hat, Inc.",
      "template.openshift.io/documentation-url": "https://docs.openshift.org/latest/using_images/other_images/jenkins.html",
      "template.openshift.io/support-url": "https://access.redhat.com"
    }
  },
  "message": "A Jenkins service has been created in your project.  Log into Jenkins with your OpenShift account.  The tutorial at https://github.com/openshift/origin/blob/master/examples/jenkins/README.md contains more information about using this template.",
  "objects": [
    {
      "kind": "Route",
      "apiVersion": "v1",
      "metadata": {
        "name": "${JENKINS_SERVICE_NAME}",
        "annotations": {
          "template.openshift.io/expose-uri": "http://{.spec.host}{.spec.path}"
        }
      },
      "spec": {
        "to": {
          "kind": "Service",
          "name": "${JENKINS_SERVICE_NAME}"
        },
        "tls": {
          "termination": "edge",
          "insecureEdgeTerminationPolicy": "Redirect"
        }
      }
    },
    {
      "kind": "PersistentVolumeClaim",
      "apiVersion": "v1",
      "metadata": {
        "name": "${JENKINS_SERVICE_NAME}"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "${VOLUME_CAPACITY}"
          }
        }
      }
    },
    {
      "kind": "DeploymentConfig",
      "apiVersion": "v1",
      "metadata": {
        "name": "${JENKINS_SERVICE_NAME}",
        "annotations": {
          "template.alpha.openshift.io/wait-for-ready": "true"
        }
      },
      "spec": {
        "strategy": {
          "type": "Recreate"
        },
        "triggers": [
          {
            "type": "ImageChange",
            "imageChangeParams": {
              "automatic": true,
              "containerNames": [
                "jenkins"
              ],
              "from": {
                "kind": "ImageStreamTag",
                "name": "${JENKINS_IMAGE_STREAM_TAG}",
                "namespace": "${NAMESPACE}"
              },
              "lastTriggeredImage": ""
            }
          },
          {
            "type": "ConfigChange"
          }
        ],
        "replicas": 1,
        "selector": {
          "name": "${JENKINS_SERVICE_NAME}"
        },
        "template": {
          "metadata": {
            "labels": {
              "name": "${JENKINS_SERVICE_NAME}"
            }
          },
          "spec": {
            "serviceAccountName": "${JENKINS_SERVICE_NAME}",
            "containers": [
              {
                "name": "jenkins",
                "image": " ",
                "readinessProbe": {
                  "timeoutSeconds": 3,
                  "initialDelaySeconds": 3,
                  "httpGet": {
                    "path": "/login",
                    "port": 8080
                  }
                },
                "livenessProbe": {
                    "timeoutSeconds": 3,
                    "initialDelaySeconds": 420,
                    "failureThreshold" : 30,
                    "httpGet": {
                        "path": "/login",
                        "port": 8080
                    }
                },
                "env": [
                  {
                    "name": "OPENSHIFT_ENABLE_OAUTH",
                    "value": "${ENABLE_OAUTH}"
                  },
                  {
                    "name": "OPENSHIFT_ENABLE_REDIRECT_PROMPT",
                    "value": "true"
                  },
                  {
                    "name": "OPENSHIFT_JENKINS_JVM_ARCH",
                    "value": "${JVM_ARCH}"
                  },
                  {
                    "name": "KUBERNETES_MASTER",
                    "value": "https://kubernetes.default:443"
                  },
                  {
                    "name": "KUBERNETES_TRUST_CERTIFICATES",
                    "value": "true"
                  },
                  {
                    "name": "JNLP_SERVICE_NAME",
                    "value": "${JNLP_SERVICE_NAME}"
                  }
                ],
                "resources": {
                  "limits": {
                    "memory": "${MEMORY_LIMIT}"
                  }
                },
                "volumeMounts": [
                  {
                    "name": "${JENKINS_SERVICE_NAME}-data",
                    "mountPath": "/var/lib/jenkins"
                  }
                ],
                "terminationMessagePath": "/dev/termination-log",
                "imagePullPolicy": "IfNotPresent",
                "capabilities": {},
                "securityContext": {
                  "capabilities": {},
                  "privileged": false
                }
              }
            ],
            "volumes": [
              {
                "name": "${JENKINS_SERVICE_NAME}-data",
                "persistentVolumeClaim": {
                  "claimName": "${JENKINS_SERVICE_NAME}"
                }
              }
            ],
            "restartPolicy": "Always",
            "dnsPolicy": "ClusterFirst"
          }
        }
      }
    },
    {
      "kind": "ServiceAccount",
        "apiVersion": "v1",
        "metadata": {
            "name": "${JENKINS_SERVICE_NAME}",
            "annotations": {
		"serviceaccounts.openshift.io/oauth-redirectreference.jenkins": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"${JENKINS_SERVICE_NAME}\"}}"
            }
        }
    },
    {
      "kind": "RoleBinding",
      "apiVersion": "v1",
      "metadata": {
          "name": "${JENKINS_SERVICE_NAME}_edit"
      },
      "groupNames": null,
      "subjects": [
          {
              "kind": "ServiceAccount",
              "name": "${JENKINS_SERVICE_NAME}"
          }
      ],
      "roleRef": {
          "name": "edit"
      }
    },
    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "${JNLP_SERVICE_NAME}"
      },
      "spec": {
        "ports": [
          {
            "name": "agent",
            "protocol": "TCP",
            "port": 50000,
            "targetPort": 50000,
            "nodePort": 0
          }
        ],
        "selector": {
          "name": "${JENKINS_SERVICE_NAME}"
        },
        "type": "ClusterIP",
        "sessionAffinity": "None"
      }
    },
    {
       "kind": "Service",
       "apiVersion": "v1",
       "metadata": {
         "name": "${JENKINS_SERVICE_NAME}",
         "annotations": {
           "service.alpha.openshift.io/dependencies": "[{\"name\": \"${JNLP_SERVICE_NAME}\", \"namespace\": \"\", \"kind\": \"Service\"}]",
           "service.openshift.io/infrastructure": "true"
         }
       },
       "spec": {
         "ports": [
           {
             "name": "web",
             "protocol": "TCP",
             "port": 80,
             "targetPort": 8080,
             "nodePort": 0
           }
         ],
         "selector": {
           "name": "${JENKINS_SERVICE_NAME}"
         },
         "type": "ClusterIP",
         "sessionAffinity": "None"
       }
    }
  ],
  "parameters": [
    {
      "name": "JENKINS_SERVICE_NAME",
      "displayName": "Jenkins Service Name",
      "description": "The name of the OpenShift Service exposed for the Jenkins container.",
      "value": "jenkins"
    },
    {
      "name": "JNLP_SERVICE_NAME",
      "displayName": "Jenkins JNLP Service Name",
      "description": "The name of the service used for master/slave communication.",
      "value": "jenkins-jnlp"
    },
    {
      "name": "ENABLE_OAUTH",
      "displayName": "Enable OAuth in Jenkins",
      "description": "Whether to enable OAuth OpenShift integration. If false, the static account 'admin' will be initialized with the password 'password'.",
      "value": "true"
    },
    {
      "name": "JVM_ARCH",
      "displayName": "Jenkins JVM Architecture",
      "description": "Whether Jenkins runs with a 32 bit (i386) or 64 bit (x86_64) JVM.",
      "value": "i386"
    },
    {
      "name": "MEMORY_LIMIT",
      "displayName": "Memory Limit",
      "description": "Maximum amount of memory the container can use.",
      "value": "512Mi"
    },
    {
      "name": "VOLUME_CAPACITY",
      "displayName": "Volume Capacity",
      "description": "Volume space available for data, e.g. 512Mi, 2Gi.",
      "value": "1Gi",
      "required": true
    },
    {
      "name": "NAMESPACE",
      "displayName": "Jenkins ImageStream Namespace",
      "description": "The OpenShift Namespace where the Jenkins ImageStream resides.",
      "value": "openshift"
    },
    {
      "name": "JENKINS_IMAGE_STREAM_TAG",
      "displayName": "Jenkins ImageStreamTag",
      "description": "Name of the ImageStreamTag to be used for the Jenkins image.",
      "value": "jenkins:latest"
    }
  ],
  "labels": {
    "template": "jenkins-persistent-template"
  }
}
