Added gitlab deployment on openshift guide.
This commit is contained in:
		
							
								
								
									
										170
									
								
								2025-08-29-gitlab-openshift/README.org
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								2025-08-29-gitlab-openshift/README.org
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,170 @@
 | 
			
		||||
#+TITLE: Gitlab installation
 | 
			
		||||
#+DATE: <2025-08-29 Fri>
 | 
			
		||||
#+AUTHOR: James Blair
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
A short guide on installing GitLab in OpenShift ~4.19~.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Pre-requisites
 | 
			
		||||
 | 
			
		||||
Before we begin, let's ensure we are logged into our cluster in the terminal and the cluster meets our version requirements.
 | 
			
		||||
 | 
			
		||||
** Verify cluster auth status
 | 
			
		||||
 | 
			
		||||
#+NAME: Verify cluster login status
 | 
			
		||||
#+begin_src bash
 | 
			
		||||
oc version && oc whoami
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+RESULTS: Verify cluster login status
 | 
			
		||||
#+begin_example
 | 
			
		||||
Client Version: 4.19.9
 | 
			
		||||
Kustomize Version: v5.5.0
 | 
			
		||||
Server Version: 4.19.9
 | 
			
		||||
Kubernetes Version: v1.32.7
 | 
			
		||||
admin
 | 
			
		||||
#+end_example
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
** Ensure cert manager is installed
 | 
			
		||||
 | 
			
		||||
A pre-requisite for GitLab is having cert manager installed.
 | 
			
		||||
 | 
			
		||||
#+NAME: Create cert manager operator subscription
 | 
			
		||||
#+begin_src bash
 | 
			
		||||
cat << EOF | oc apply --filename -
 | 
			
		||||
apiVersion: operators.coreos.com/v1alpha1
 | 
			
		||||
kind: Subscription
 | 
			
		||||
metadata:
 | 
			
		||||
  name: openshift-cert-manager-operator
 | 
			
		||||
  namespace: cert-manager-operator
 | 
			
		||||
spec:
 | 
			
		||||
  channel: stable-v1
 | 
			
		||||
  installPlanApproval: Automatic
 | 
			
		||||
  name: openshift-cert-manager-operator
 | 
			
		||||
  source: redhat-operators
 | 
			
		||||
  sourceNamespace: openshift-marketplace
 | 
			
		||||
EOF
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+RESULTS: Create cert manager operator subscription
 | 
			
		||||
#+begin_example
 | 
			
		||||
subscription.operators.coreos.com/openshift-cert-manager-operator created
 | 
			
		||||
#+end_example
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Install gitlab operator
 | 
			
		||||
 | 
			
		||||
Everything we deploy relating to GitLab will be via the [[https://docs.gitlab.com/operator][GitLab Operator]]. Our first step is to create a ~Subscription~ that will install the Operator on our OpenShift cluster.
 | 
			
		||||
 | 
			
		||||
#+NAME: Create operator subscription
 | 
			
		||||
#+begin_src bash
 | 
			
		||||
cat << EOF | oc apply --filename -
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Namespace
 | 
			
		||||
metadata:
 | 
			
		||||
  name: gitlab-system
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
apiVersion: operators.coreos.com/v1alpha1
 | 
			
		||||
kind: Subscription
 | 
			
		||||
metadata:
 | 
			
		||||
  name: gitlab-operator-kubernetes
 | 
			
		||||
  namespace: gitlab-system
 | 
			
		||||
spec:
 | 
			
		||||
  channel: stable
 | 
			
		||||
  installPlanApproval: Automatic
 | 
			
		||||
  name: gitlab-operator-kubernetes
 | 
			
		||||
  source: certified-operators
 | 
			
		||||
  sourceNamespace: openshift-marketplace
 | 
			
		||||
  startingCSV: gitlab-operator-kubernetes.v2.3.1
 | 
			
		||||
EOF
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+RESULTS: Create operator subscription
 | 
			
		||||
#+begin_example
 | 
			
		||||
namespace/gitlab-system created
 | 
			
		||||
subscription.operators.coreos.com/gitlab-operator-kubernetes created
 | 
			
		||||
#+end_example
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Create gitlab instance
 | 
			
		||||
 | 
			
		||||
Once the operator is installed we can create an instance of GitLab using the newly available ~GitLab~ CRD, a basic example is below:
 | 
			
		||||
 | 
			
		||||
#+NAME: Create gitlab instance
 | 
			
		||||
#+begin_src bash
 | 
			
		||||
cat << EOF | oc apply --filename -
 | 
			
		||||
apiVersion: apps.gitlab.com/v1beta1
 | 
			
		||||
kind: GitLab
 | 
			
		||||
metadata:
 | 
			
		||||
  name: gitlab
 | 
			
		||||
  namespace: gitlab-system
 | 
			
		||||
spec:
 | 
			
		||||
  chart:
 | 
			
		||||
    version: "9.3.1"
 | 
			
		||||
    values:
 | 
			
		||||
      certmanager:
 | 
			
		||||
        install: false
 | 
			
		||||
      certmanager-issuer:
 | 
			
		||||
        email: "nobody@nowhere.nosite"
 | 
			
		||||
      global:
 | 
			
		||||
        hosts:
 | 
			
		||||
          domain: $(oc get ingress.config.openshift.io cluster --output jsonpath={'.spec.domain'})
 | 
			
		||||
        ingress:
 | 
			
		||||
          annotations:
 | 
			
		||||
            route.openshift.io/termination: edge
 | 
			
		||||
          class: none
 | 
			
		||||
          configureCertmanager: true
 | 
			
		||||
          tls:
 | 
			
		||||
            secretName: null
 | 
			
		||||
      nginx-ingress:
 | 
			
		||||
        install: false
 | 
			
		||||
        enabled: false
 | 
			
		||||
      prometheus:
 | 
			
		||||
        install: false
 | 
			
		||||
EOF
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+RESULTS: Create gitlab instance
 | 
			
		||||
#+begin_example
 | 
			
		||||
gitlab.apps.gitlab.com/gitlab created
 | 
			
		||||
#+end_example
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
We can wait for the gitlab deployment to become ready by checking the condition of the ~Gitlab~ custom resource.
 | 
			
		||||
 | 
			
		||||
#+NAME: Wait for gitlab deployment
 | 
			
		||||
#+begin_src bash
 | 
			
		||||
oc --namespace gitlab-system wait --for=condition=Available gitlab/gitlab --timeout=3m
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+RESULTS: Wait for gitlab deployment
 | 
			
		||||
#+begin_example
 | 
			
		||||
gitlab.apps.gitlab.com/gitlab condition met
 | 
			
		||||
#+end_example
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Log into gitlab
 | 
			
		||||
 | 
			
		||||
Once the gitlab instance is ~Available~ we can retrieve the ~Ingress~ hostname and login!
 | 
			
		||||
 | 
			
		||||
#+NAME: Retrive gitlab url
 | 
			
		||||
#+begin_src bash
 | 
			
		||||
echo "https://"$(oc get ingress --namespace gitlab-system gitlab-webservice-default --output jsonpath={'.spec.tls[0].hosts[0]'})
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+RESULTS: Retrive gitlab url
 | 
			
		||||
#+begin_example
 | 
			
		||||
https://gitlab.apps.cluster-x99pc.dynamic.redhatworkshops.io
 | 
			
		||||
#+end_example
 | 
			
		||||
 | 
			
		||||
#+NAME: Retrieve gitlab credentials
 | 
			
		||||
#+begin_src bash
 | 
			
		||||
oc get secret --namespace gitlab-system gitlab-gitlab-initial-root-password --output jsonpath={'.data.password'} | base64 --decode | wl-copy
 | 
			
		||||
#+end_src
 | 
			
		||||
 | 
			
		||||
#+RESULTS: Retrieve gitlab credentials
 | 
			
		||||
#+begin_example
 | 
			
		||||
#+end_example
 | 
			
		||||
		Reference in New Issue
	
	Block a user