diff --git a/argocd/applications/cluster-secrets/gitlab-staging.yaml b/argocd/applications/cluster-secrets/gitlab-staging.yaml
new file mode 100644
index 0000000..bff303e
--- /dev/null
+++ b/argocd/applications/cluster-secrets/gitlab-staging.yaml
@@ -0,0 +1,23 @@
+# Declare the application applying the gitlab staging cluster secrets
+# like the repositories credentials, the cluster definitions, ...
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+  name: gitlab-staging-argocd-secrets
+  namespace: argocd
+spec:
+  project: default # Todo define a project to limit the deployment types
+  source:
+    repoURL: ssh://git@forge.softwareheritage.org/source/k8s-swh-private-data.git
+    targetRevision: HEAD
+    path: gitlab-staging
+    directory:
+      recurse: true
+  destination:
+    server: https://192.168.200.113
+    namespace: default
+  syncPolicy:
+    automated:
+      prune: true
+      selfHeal: true
+      allowEmpty: false
diff --git a/argocd/applications/gitlab-staging/cert-manager-application.yaml b/argocd/applications/gitlab-staging/cert-manager-application.yaml
new file mode 100644
index 0000000..b420cf8
--- /dev/null
+++ b/argocd/applications/gitlab-staging/cert-manager-application.yaml
@@ -0,0 +1,33 @@
+# Declare the application to manage cert-manager
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+  name: gitlab-staging-certmanager
+  namespace: argocd
+spec:
+  revisionHistoryLimit: 2
+  project: default
+  source:
+    chart: cert-manager
+    repoURL: https://charts.jetstack.io
+    targetRevision: v1.9.1
+    helm:
+      releaseName: cert-manager
+      parameters:
+        - name: "installCRDs"
+          value: "true"
+  destination:
+    server: https://192.168.200.13
+    namespace: cert-manager
+  syncPolicy:
+    automated:
+      prune: true
+      selfHeal: true
+    syncOptions:
+    - RespectIgnoreDifferences=true
+  ignoreDifferences:
+    - group: admissionregistration.k8s.io
+      kind: ValidatingWebhookConfiguration
+      name: cert-manager-webhook
+      jqPathExpressions:
+        - .webhooks[].namespaceSelector.matchExpressions[] | select(.key == "control-plane")
diff --git a/argocd/applications/gitlab-staging/gitlab-operator.yaml b/argocd/applications/gitlab-staging/gitlab-operator.yaml
new file mode 100644
index 0000000..149a217
--- /dev/null
+++ b/argocd/applications/gitlab-staging/gitlab-operator.yaml
@@ -0,0 +1,35 @@
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+  name: gitlab-staging-gitlab-operator
+  namespace: argocd
+spec:
+  project: default
+  source:
+    repoURL: https://gitlab.com/gitlab-org/cloud-native/gitlab-operator.git
+    targetRevision: 0.8.0
+    path: deploy/chart
+    helm:
+      releaseName: gitlab-operator
+  destination:
+    server: https://192.168.200.13
+    namespace: gitlab-system
+  syncPolicy:
+    automated:
+      prune: true
+      selfHeal: true
+      allowEmpty: false
+    syncOptions:
+    - RespectIgnoreDifferences=true
+  ignoreDifferences:
+    - group: '*'
+      kind: Deployment
+      name: gitlab-controller-manager
+      jqPathExpressions:
+        - .spec.template.metadata.annotations
+    - group: admissionregistration.k8s.io
+      kind: ValidatingWebhookConfiguration
+      name: gitlab-validating-webhook-configuration
+      jqPathExpressions:
+        - .webhooks[].namespaceSelector.matchExpressions[] | select(.key == "control-plane")
+