diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8eacfc44ab75a96690766c44d6fb94255e0d0599..fcccf2a3a6f15a3592433d068862a1eb576836d0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -406,6 +406,9 @@ prepare_scripts:
       - gitlab-shared-runner-4.yaml
       - gitlab-shared-runner-4_sa.yaml
       - gitlab-shared-runner-4_pvs.yaml
+      - sonarqube.yaml
+      - sonarqube_pvs.yaml
+      - sonarqube_sa.yaml
   script:
     - >
       python3 deploy/generate_scripts/generate_deployment_from_middle.py \
@@ -436,6 +439,7 @@ prepare_scripts:
         "wordpress/cli_10003/wordpress_small.yaml" \
         "gitlab/runner/gitlab_runner_docker/gitlab_runner_docker_small.yaml" \
         "gitlab/runner/shared_runner_4/gitlab_shared_runner_4.yaml" \
+        "sonarqube/sonarqube.yaml"\
 
 # deploy
 
@@ -781,6 +785,17 @@ deploy_wordpress-cli-10003:
     MOUNT: "true"
     MOUNT_PARAMS: wordpress-cli-10003/html wordpress-cli-10003/db
 
+deploy_sonarqube:
+  extends: .deploy_job_template
+  variables:
+    DEPLOYMENT_FILE: sonarqube.yaml
+    PVS_FILE: sonarqube_pvs.yaml 
+    SA_FILE: sonarqube_sa.yaml
+    DEPLOYMENT_NAME: sonarqube
+    NAMESPACE: sonarqube
+    MOUNT: "true"
+    MOUNT_PARAMS: sonarqube/data sonarqube/db $CHMOD_FILE_PARAM sonarqube/data:777
+
 ### joos.io deployments
 
 deploy_joos.io_homepage:
diff --git a/sonarqube/sonar.properties b/sonarqube/sonar.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a80bd8e2a29eec34c1603d4ee1b115b7b0ab1f59
--- /dev/null
+++ b/sonarqube/sonar.properties
@@ -0,0 +1,12 @@
+sonar.jdbc.username=54a6b1a8-63d0-43cb-8de4-110ec1f6bf8f
+sonar.jdbc.password=1782a48c-92ec-485a-bc09-9ab8ae223251
+sonar.jdbc.url=jdbc:postgresql://postgres/sonarqube
+sonar.path.data=/var/sonarqube/data
+sonar.auth.gitlab.enabled=True
+sonar.auth.gitlab.url=https://git.420joos.dev
+sonar.auth.gitlab.applicationId.secured=461e510ad0980681e64df062e544cb3d7f9708e6609a8f07ead57d360f4627c7
+sonar.auth.gitlab.secret.secured=ad777fb8c554be3447dd70689a381bfe09e68b385f536992009a90f64cbf5627
+sonar.auth.gitlab.allowUsersToSignUp=True
+sonar.auth.gitlab.groupsSync=False
+sonar.core.serverBaseURL=https://sonarqube.testenv.420joos.dev/
+sonar.projectCreation.mainBranchName=master
diff --git a/sonarqube/sonarqube.yaml b/sonarqube/sonarqube.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6c2ffeb6618d19f955ed06f54456beee0f6a0c35
--- /dev/null
+++ b/sonarqube/sonarqube.yaml
@@ -0,0 +1,54 @@
+apiVersion: v1
+name: sonarqube
+namespace: sonarqube
+type: none
+deployments:
+- id: default
+  env:
+    content:
+      SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"
+  exposedHttpPort: 9000
+  image: sonarqube:10.0.0-community
+  name: sonarqube
+  uri: sonarqube.${BASE_URL}
+  maxUploadSize: 50m
+  volumes:
+    data:
+      accessModes:
+      - ReadWriteMany
+      mountPath: /var/sonarqube/data
+      nfs:
+        path: /sonarqube/data
+        server: ${PRODCLUSTER_DEVICE_IP}
+      size: 1Gi
+      type: pv
+    test-back-configmap:
+      content:
+      - sonarqube/sonar.properties
+      mountPath: /opt/sonarqube/conf
+      subPath: true
+      type: configMap
+- id: postgres
+  env:
+    content:
+      LC_COLLATE: C
+      LC_CTYPE: C
+      POSTGRES_INITDB_ARGS: "-E utf8"
+      POSTGRES_DB: sonarqube
+      POSTGRES_USER: 54a6b1a8-63d0-43cb-8de4-110ec1f6bf8f
+      POSTGRES_PASSWORD: 1782a48c-92ec-485a-bc09-9ab8ae223251
+  image: postgres:15-alpine
+  name: postgres
+  ports:
+    clusterIP:
+    - port: 5432
+      protocol: TCP
+      targetPort: 5432
+  volumes:
+    db:
+      mountPath: /var/lib/postgresql/data
+      nfs:
+        path: /sonarqube/db
+        server: ${PRODCLUSTER_DEVICE_IP}
+      size: 2Gi
+      type: pv