samjaninf
1/26/2018 - 6:25 PM

gitlab-3.6.10

{
  "kind": "Template",
  "apiVersion": "v1",
  "metadata": {
    "name": "gitlab-ce",
    "annotations": {
      "iconClass": "icon-gitlab",
      "description": "GitLab. Collaboration and source control management: code, test, and deploy together! \n\n GitLab requries that the serviceaccount for the main GitLab app be added to the anyuid security context. The service account name is: <application name>-user",
      "tags": "instant-app,gitlab,VCS,ci-cd"
    }
  },
  "labels": {
    "createdBy": "gitlab-ce-template"
  },
  "parameters": [
    {
      "description": "The name for the application. The service will be named like the application.",
      "displayName": "Application name.",
      "name": "APPLICATION_NAME",
      "value": "gitlab-ce"
    },
    {
      "description": "Hostname for service routes. Set this in order to have the GitLab display the correct clone urls.",
      "displayName": "Gitlab instance hostname",
      "name": "APPLICATION_HOSTNAME",
      "required": true
    },
    {
      "name": "GITLAB_ROOT_PASSWORD",
      "displayName": "GitLab Root User Password",
      "description": "Password for the GitLab 'root' user. Must be at least 8 characters long. Leave blank if you would rather configure the password using the website during first use."
    },
    {
      "name": "POSTGRESQL_USER",
      "displayName": "PostgreSQL User",
      "description": "Username for PostgreSQL user that will be used for accessing the database.",
      "generate": "expression",
      "from": "user[A-Z0-9]{3}",
      "required": true
    },
    {
      "name": "POSTGRESQL_PASSWORD",
      "displayName": "PostgreSQL Password",
      "description": "Password for the PostgreSQL user.",
      "generate": "expression",
      "from": "[a-zA-Z0-9]{16}",
      "required": true
    },
    {
      "name": "POSTGRESQL_ADMIN_PASSWORD",
      "displayName": "PostgreSQL Admin User Password",
      "description": "Password for the PostgreSQL Admin user.",
      "generate": "expression",
      "from": "[a-zA-Z0-9]{16}",
      "required": true
    },
    {
      "name": "POSTGRESQL_DATABASE",
      "displayName": "PostgreSQL Database Name",
      "description": "Name of the PostgreSQL database accessed.",
      "value": "gitlabhq_production",
      "required": true
    },
    {
      "name": "UNICORN_WORKERS",
      "displayName": "Number of Unicorn Workers",
      "description": "Number of Unicorn Workers to use per instance. Must be at least 2.",
      "value": "2",
      "required": true
    },
    {
      "description": "Volume size for /etc",
      "displayName": "/etc/gitlab volume size",
      "name": "ETC_VOL_SIZE",
      "value": "100Mi"
    },
    {
      "description": "Volume size for GitLab data",
      "displayName": "GitLab data volume size",
      "name": "GITLAB_DATA_VOL_SIZE",
      "value": "5Gi"
    },
    {
      "description": "Volume size for postgresql data",
      "displayName": "postgresql volume size",
      "name": "POSTGRESQL_VOL_SIZE",
      "value": "2Gi"
    },
    {
      "description": "Volume size for redis data",
      "displayName": "redis volume size",
      "name": "REDIS_VOL_SIZE",
      "value": "512Mi"
    }
  ],
  "objects": [
    {
      "kind": "ImageStream",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}",
        "labels": {
          "app": "${APPLICATION_NAME}"
        }
      },
      "spec": {
        "tags": [
          {
            "name": "gitlab-10.3.6",
            "from": {
              "kind": "DockerImage",
              "name": "gitlab/gitlab-ce:10.3.6-ce.0"
            }
          }
        ]
      }
    },
    {
      "kind": "ImageStream",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}-redis",
        "labels": {
          "app": "${APPLICATION_NAME}"
        }
      },
      "spec": {
        "tags": [
          {
            "name": "3.2.3",
            "from": {
              "kind": "DockerImage",
              "name": "redis:3.2.3-alpine"
            }
          }
        ]
      }
    },
    {
      "kind": "ServiceAccount",
        "apiVersion": "v1",
        "metadata": {
          "name": "${APPLICATION_NAME}-user"
        }
    },
    {
      "kind": "DeploymentConfig",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}",
        "labels": {
          "app": "${APPLICATION_NAME}"
        }
      },
      "spec": {
        "strategy": {
          "type": "Recreate",
          "recreateParams": {},
          "resources": {}
        },
        "triggers": [
          {
            "type": "ConfigChange"
          },
          {
            "type": "ImageChange",
            "imageChangeParams": {
              "automatic": true,
              "containerNames": [
                "gitlab-ce"
              ],
              "from": {
                "kind": "ImageStreamTag",
                "name": "${APPLICATION_NAME}:gitlab-10.3.6"
              }
            }
          }
        ],
        "replicas": 1,
        "test": false,
        "selector": {
          "app": "${APPLICATION_NAME}",
          "deploymentconfig": "${APPLICATION_NAME}"
        },
        "template": {
          "metadata": {
            "labels": {
              "app": "${APPLICATION_NAME}",
              "deploymentconfig": "${APPLICATION_NAME}"
            }
          },
          "spec": {
            "volumes": [
              {
                "name": "gitlab-ce-volume-1",
                "persistentVolumeClaim": {
                  "claimName": "${APPLICATION_NAME}-etc"
                }
              },
              {
                "name": "gitlab-ce-volume-2",
                "persistentVolumeClaim": {
                  "claimName": "${APPLICATION_NAME}-data"
                }
              }
            ],
            "containers": [
              {
                "name": "gitlab-ce",
                "image": "gitlab-ce",
                "ports": [
                  {
                    "containerPort": 22,
                    "protocol": "TCP"
                  },
                  {
                    "containerPort": 80,
                    "protocol": "TCP"
                  }
                ],
                "env": [
                  {
                    "name": "GITLAB_OMNIBUS_CONFIG",
                    "value": "hostname='${APPLICATION_HOSTNAME}'; external_url \"http://#{hostname}/\" unless hostname.to_s == ''; root_pass='${GITLAB_ROOT_PASSWORD}'; gitlab_rails['initial_root_password']=root_pass unless root_pass.to_s == ''; postgresql['enable']=false; gitlab_rails['db_host'] = '${APPLICATION_NAME}-postgresql'; gitlab_rails['db_password']='${POSTGRESQL_PASSWORD}'; gitlab_rails['db_username']='${POSTGRESQL_USER}'; gitlab_rails['db_database']='${POSTGRESQL_DATABASE}'; redis['enable'] = false; gitlab_rails['redis_host']='${APPLICATION_NAME}-redis'; unicorn['worker_processes'] = ${UNICORN_WORKERS}; manage_accounts['enable'] = true; manage_storage_directories['manage_etc'] = false; gitlab_shell['auth_file'] = '/gitlab-data/ssh/authorized_keys'; git_data_dirs({ 'default' => { 'path' => '/gitlab-data/git-data' } }); gitlab_rails['shared_path'] = '/gitlab-data/shared'; gitlab_rails['uploads_directory'] = '/gitlab-data/uploads'; gitlab_ci['builds_directory'] = '/gitlab-data/builds'; prometheus_monitoring['enable'] = false;"
                  }
                ],
                "resources": {
                  "limits": {
                    "cpu": "1",
                    "memory": "2Gi"
                  },
                  "requests": {
                    "cpu": "500m",
                    "memory": "1Gi"
                  }
                },
                "volumeMounts": [
                  {
                    "name": "gitlab-ce-volume-1",
                    "mountPath": "/etc/gitlab"
                  },
                  {
                    "name": "gitlab-ce-volume-2",
                    "mountPath": "/gitlab-data"
                  }
                ],
                "livenessProbe": {
                  "httpGet": {
                    "path": "/help",
                    "port": 80,
                    "scheme": "HTTP"
                  },
                  "initialDelaySeconds": 120,
                  "timeoutSeconds": 1,
                  "periodSeconds": 10,
                  "successThreshold": 1,
                  "failureThreshold": 3
                },
                "readinessProbe": {
                  "httpGet": {
                    "path": "/help",
                    "port": 80,
                    "scheme": "HTTP"
                  },
                  "initialDelaySeconds": 20,
                  "timeoutSeconds": 1,
                  "periodSeconds": 10,
                  "successThreshold": 1,
                  "failureThreshold": 3
                },
                "terminationMessagePath": "/dev/termination-log",
                "imagePullPolicy": "IfNotPresent"
              }
            ],
            "restartPolicy": "Always",
            "terminationGracePeriodSeconds": 30,
            "dnsPolicy": "ClusterFirst",
            "serviceAccount": "${APPLICATION_NAME}-user"
          }
        }
      }
    },
    {
      "kind": "DeploymentConfig",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}-redis",
        "labels": {
          "app": "${APPLICATION_NAME}"
        }
      },
      "spec": {
        "strategy": {
          "type": "Recreate",
          "recreateParams": {},
          "resources": {}
        },
        "triggers": [
          {
            "type": "ConfigChange"
          },
          {
            "type": "ImageChange",
            "imageChangeParams": {
              "automatic": true,
              "containerNames": [
                "gitlab-ce-redis"
              ],
              "from": {
                "kind": "ImageStreamTag",
                "name": "${APPLICATION_NAME}-redis:3.2.3"
              }
            }
          }
        ],
        "replicas": 1,
        "test": false,
        "selector": {
          "app": "${APPLICATION_NAME}",
          "deploymentconfig": "${APPLICATION_NAME}-redis"
        },
        "template": {
          "metadata": {
            "labels": {
              "app": "${APPLICATION_NAME}",
              "deploymentconfig": "${APPLICATION_NAME}-redis"
            }
          },
          "spec": {
            "volumes": [
              {
                "name": "gitlab-ce-volume-4",
                "persistentVolumeClaim": {
                  "claimName": "${APPLICATION_NAME}-redis-data"
                }
              }
            ],
            "containers": [
              {
                "name": "gitlab-ce-redis",
                "image": "gitlab-ce-redis",
                "command": ["/bin/sh", "-ec"],
                "args": ["exec redis-server"],
                "ports": [
                  {
                    "containerPort": 6379,
                    "protocol": "TCP"
                  }
                ],
                "resources": {
                  "limits": {
                    "cpu": "1",
                    "memory": "512Mi"
                  },
                  "requests": {
                    "cpu": "100m",
                    "memory": "300Mi"
                  }
                },
                "volumeMounts": [
                  {
                    "name": "gitlab-ce-volume-4",
                    "mountPath": "/data"
                  }
                ],
                "terminationMessagePath": "/dev/termination-log",
                "imagePullPolicy": "IfNotPresent"
              }
            ],
            "restartPolicy": "Always",
            "terminationGracePeriodSeconds": 30,
            "dnsPolicy": "ClusterFirst"
          }
        }
      }
    },
    {
      "kind": "DeploymentConfig",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}-postgresql",
        "labels": {
          "app": "${APPLICATION_NAME}"
        }
      },
      "spec": {
        "strategy": {
          "type": "Recreate",
          "recreateParams": {
            "post": {
              "failurePolicy": "Abort",
              "execNewPod": {
                "containerName": "gitlab-ce-postgresql",
                "command": [
                  "/usr/bin/scl",
                  "enable",
                  "rh-postgresql94",
                  "export PGPASSWORD='${POSTGRESQL_ADMIN_PASSWORD}'; psql -h '${APPLICATION_NAME}-postgresql' -U postgres -d ${POSTGRESQL_DATABASE} -c 'CREATE EXTENSION IF NOT EXISTS pg_trgm;'"
                ],
                "env": [
                  { "name": "HOME", "value": "/var/lib/pgsql" },
                  { "name": "PGDATA", "value": "/var/lib/pgsql/data/userdata" },
                  { "name": "CONTAINER_SCRIPTS_PATH", "value": "/usr/share/container-scripts/postgresql" }
                ]
              }
            }
          },
          "resources": {}
        },
        "triggers": [
          {
            "type": "ConfigChange"
          },
          {
            "type": "ImageChange",
            "imageChangeParams": {
              "automatic": true,
              "containerNames": [
                "gitlab-ce-postgresql"
              ],
              "from": {
                "kind": "ImageStreamTag",
                "name": "postgresql:9.4",
                "namespace": "openshift"
              }
            }
          }
        ],
        "replicas": 1,
        "test": false,
        "selector": {
          "app": "${APPLICATION_NAME}",
          "deploymentconfig": "${APPLICATION_NAME}-postgresql"
        },
        "template": {
          "metadata": {
            "labels": {
              "app": "${APPLICATION_NAME}",
              "deploymentconfig": "${APPLICATION_NAME}-postgresql"
            }
          },
          "spec": {
            "volumes": [
              {
                "name": "gitlab-ce-volume-3",
                "persistentVolumeClaim": {
                  "claimName": "${APPLICATION_NAME}-postgresql"
                }
              }
            ],
            "containers": [
              {
                "name": "gitlab-ce-postgresql",
                "image": "gitlab-ce-postgresql",
                "ports": [
                  {
                    "containerPort": 5432,
                    "protocol": "TCP"
                  }
                ],
                "readinessProbe": {
                  "timeoutSeconds": 1,
                  "initialDelaySeconds": 5,
                  "exec": {
                    "command": [ "/bin/sh", "-i", "-c", "psql -h 127.0.0.1 -U $POSTGRESQL_USER -q -d $POSTGRESQL_DATABASE -c 'SELECT 1'"]
                  }
                },
                "livenessProbe": {
                  "timeoutSeconds": 1,
                  "initialDelaySeconds": 30,
                  "tcpSocket": {
                    "port": 5432
                  }
                },
                "env": [
                  {
                    "name": "POSTGRESQL_USER",
                    "value": "${POSTGRESQL_USER}"
                  },
                  {
                    "name": "POSTGRESQL_PASSWORD",
                    "value": "${POSTGRESQL_PASSWORD}"
                  },
                  {
                    "name": "POSTGRESQL_DATABASE",
                    "value": "${POSTGRESQL_DATABASE}"
                  },
                  {
                    "name": "POSTGRESQL_ADMIN_PASSWORD",
                    "value": "${POSTGRESQL_ADMIN_PASSWORD}"
                  }
                ],
                "resources": {
                  "limits": {
                    "cpu": "1",
                    "memory": "512Mi"
                  },
                  "requests": {
                    "cpu": "300m",
                    "memory": "300Mi"
                  }
                },
                "volumeMounts": [
                  {
                    "name": "gitlab-ce-volume-3",
                    "mountPath": "/var/lib/pgsql/data"
                  }
                ],
                "terminationMessagePath": "/dev/termination-log",
                "imagePullPolicy": "IfNotPresent"
              }
            ],
            "restartPolicy": "Always",
            "terminationGracePeriodSeconds": 30,
            "dnsPolicy": "ClusterFirst"
          }
        }
      }
    },
    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}",
        "labels": {
          "app": "${APPLICATION_NAME}"
        }
      },
      "spec": {
        "ports": [
          {
            "name": "22-ssh",
            "protocol": "TCP",
            "port": 22,
            "targetPort": 22
          },
          {
            "name": "80-http",
            "protocol": "TCP",
            "port": 80,
            "targetPort": 80
          }
        ],
        "selector": {
          "app": "${APPLICATION_NAME}",
          "deploymentconfig": "${APPLICATION_NAME}"
        },
        "type": "ClusterIP",
        "sessionAffinity": "None"
      }
    },
    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}-redis",
        "labels": {
          "app": "${APPLICATION_NAME}"
        }
      },
      "spec": {
        "ports": [
          {
            "name": "6379-redis",
            "protocol": "TCP",
            "port": 6379,
            "targetPort": 6379
          }
        ],
        "selector": {
          "app": "${APPLICATION_NAME}",
          "deploymentconfig": "${APPLICATION_NAME}-redis"
        },
        "type": "ClusterIP",
        "sessionAffinity": "None"
      }
    },
    {
       "kind": "Service",
       "apiVersion": "v1",
       "metadata": {
         "name": "${APPLICATION_NAME}-postgresql",
         "labels": {
           "app": "${APPLICATION_NAME}"
         }
       },
       "spec": {
         "ports": [
           {
             "name": "5432-postgresql",
             "protocol": "TCP",
             "port": 5432,
             "targetPort": 5432
           }
         ],
         "selector": {
           "app": "${APPLICATION_NAME}",
           "deploymentconfig": "${APPLICATION_NAME}-postgresql"
         },
         "type": "ClusterIP",
         "sessionAffinity": "None"
       }
     },
    {
      "kind": "PersistentVolumeClaim",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}-redis-data"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "${REDIS_VOL_SIZE}"
          }
        }
      }
    },
    {
      "kind": "PersistentVolumeClaim",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}-etc"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "${ETC_VOL_SIZE}"
          }
        }
      }
    },
    {
      "kind": "PersistentVolumeClaim",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}-data"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "${GITLAB_DATA_VOL_SIZE}"
          }
        }
      }
    },
    {
      "kind": "PersistentVolumeClaim",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}-postgresql"
      },
      "spec": {
        "accessModes": [
          "ReadWriteOnce"
        ],
        "resources": {
          "requests": {
            "storage": "${POSTGRESQL_VOL_SIZE}"
          }
        }
      }
    },
    {
      "kind": "Route",
      "apiVersion": "v1",
      "metadata": {
        "name": "${APPLICATION_NAME}",
        "labels": {
          "app": "${APPLICATION_NAME}"
        }
      },
      "spec": {
        "host": "${APPLICATION_HOSTNAME}",
        "to": {
          "kind": "Service",
          "name": "${APPLICATION_NAME}"
        },
        "port": {
          "targetPort": "80-http"
        }
      }
    }
  ]
}