#!/usr/bin/env bash # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # 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. # # Install GitLab # source "$(dirname "$(realpath "$0")")/common.sh" function install_gitlab() { echo "${blue}Installing GitLab${reset}" local -r gitlab_host="${GITLAB_HOSTNAME:-gitlab.127.0.0.1.sslip.io}" $KUBECTL apply -f - < 'dirty_decay_ms:1000,muzzy_decay_ms:1000' } gitaly['configuration'] = { ruby_max_rss: 200_000_000, concurrency: [ { rpc: "/gitaly.SmartHTTPService/PostReceivePack", max_per_repo: 1 }, { rpc: "/gitaly.SSHService/SSHUploadPack", max_per_repo: 1 } ] } gitaly['env'] = { 'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000', 'GITALY_COMMAND_SPAWN_MAX_PARALLEL' => '1' } ports: - containerPort: 80 name: http - containerPort: 22 name: ssh resources: requests: memory: "2048Mi" limits: memory: "4096Mi" volumes: - name: gitlab persistentVolumeClaim: claimName: gitlab --- apiVersion: v1 kind: Service metadata: name: gitlab-internal namespace: gitlab spec: selector: app.kubernetes.io/name: gitlab ports: - name: http protocol: TCP port: 80 targetPort: http - name: ssh protocol: TCP port: 30022 targetPort: ssh type: ClusterIP --- apiVersion: v1 kind: Service metadata: name: gitlab-external-ssh namespace: gitlab spec: selector: app.kubernetes.io/name: gitlab ports: - name: ssh protocol: TCP port: 30022 targetPort: ssh nodePort: 30022 type: NodePort --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: gitlab namespace: gitlab spec: ingressClassName: contour-external rules: - host: ${gitlab_host} http: paths: - backend: service: name: gitlab-internal port: number: 80 pathType: Prefix path: / EOF sleep 1 $KUBECTL wait pod --for=condition=Ready -l '!job-name' -n gitlab --timeout=5m echo '::group::Waiting for Gitlab' if ! curl --retry 120 -f --retry-all-errors --retry-delay 5 "${gitlab_host}"; then $KUBECTL logs pod/gitlab -n gitlab echo '::endgroup::' return 1 fi echo echo '::endgroup::' echo "the GitLab server is available at: http://${gitlab_host}" echo "${green}✅ GitLab${reset}" } # Invoke only when run directly # Be a library when sourced if [ "$0" = "${BASH_SOURCE[0]}" ]; then set -o errexit set -o nounset set -o pipefail function main() { install_gitlab } main "$@" fi