Dem GOP eine neue Teststage hinzufügen

In diesem Tutorial zeige ich, wie man beim GOP neue Stages in dem Helm Chart Beispiel der Petclinic hinzufügt. Was der GOP ist und wie man ihn benutzt, kann man auf der GOP Seite nachlesen

TL;DR

  • Im Repo de Petclinic:
    • neue values-<stage>.yaml im Ordner k8s anlegen.
    • Im Jenkinsfile neue Stage hinzufügen
  • Im Repo Argocd unter /projects/example-apps.yml
    • neue destination und
    • neuen Namespace hinzufügen
  • Im Repo example-apps unter /argocd eine Application in der petclinic-helm.yaml hinzufügen

Der GOP läßt einfach per Shell Script aus der Dokumentation lokal ausführen.

bash <(curl -s \
https://raw.githubusercontent.com/cloudogu/gitops-playground/main/scripts/init-cluster.sh) \
&& docker run --rm -t --pull=always -u $(id -u) \
-v ~/.config/k3d/kubeconfig-gitops-playground.yaml:/home/.kube/config \
--net=host \
ghcr.io/cloudogu/gitops-playground --yes --argocd --ingress-nginx --base-url=http://localhost

Dann wird als Beispiel Applikation die Petclinic von Spring ausgerollt. Einmal als Beispiel mit Helm Chart und einmal als Beispiel mit Kubernetes Manifesten. Das ganze jeweils in 2 Stages, „Production“ und „Staging“.

Step by Step

petclinic-helm anpassen

Im Repository für die petclinic-helm als erstes eine neue Datei für eine neue Stage hinzufügen. In dieser Ordnerstruktur

die values-staging.yaml als Vorlage nehmen und bspw. eine values-qs-yaml anlegen.

Den Inhalt anpassen

service:
  port: 80

ingress:
  hosts:
    - host: qs.petclinic-helm.petclinic.localhost
      paths: ['/']

Neuen host- Namen wählen, den wird dann Kubernetes für uns erstellen.

Als nächstes in diesem Repository das Jenkinsfile anpassen.

In der Stage „Deploy“ wird eine Konfiguration für den gitOps Prozess erstellt, die gitopsConfig Variable Dort wird im Bereich Stages die neue Stage hinzugefügt.

Vorher

stages: [
                                staging: [
                                        namespace: 'example-apps-staging',
                                        deployDirectly: true ],
                                production: [
                                        namespace: 'example-apps-production',
                                        deployDirectly: false ]
                        ]

Nachher

stages: [
                                staging: [
                                        namespace: 'example-apps-staging',
                                        deployDirectly: true ],
                                qs: [
                                        namespace: 'example-apps-qs',
                                        deployDirectly: true ],
                                production: [
                                        namespace: 'example-apps-production',
                                        deployDirectly: false ]
                        ]

Damit wird der Jenkins beim Bauen alles weitere für das Deployment erstellen.

ArgoCD konfigurieren

Damit die Anwendung auch automatisch per GitOps deployt wird, muss nur noch ArgoCD angepasst werden.

Zum einen benötigen ArgoCD ein neues Ziel zum deployen, denn die neue Stage soll in einem eigenen -neu erstelltem – Namespace laufen und zum anderen benötigt ArgoCD für die neue Stage eine neue Application.

Schritt 1, neues Ziel hinzufügen

Im Repository argocd unter argocd/projects die vorhandene example-apps.yaml anpassen. Dort ist die Petclinic konfiguriert für ArgoCD.

Den Bereich destinations erweitern

Vorher

  destinations:
  - namespace: example-apps-production
    server: https://kubernetes.default.svc
  - namespace: example-apps-staging
    server: https://kubernetes.default.svc

Nachher

  destinations:
  - namespace: example-apps-production
    server: https://kubernetes.default.svc
  - namespace: example-apps-staging
    server: https://kubernetes.default.svc
  - namespace: example-apps-qs
    server: https://kubernetes.default.svc

Und in der gleichen Datei die SourceNamespaces erweitern.

  sourceNamespaces:
    - 'example-apps-staging'
    - 'example-apps-production'
    - 'example-apps-qs'

Nun im Repository der example-apps noch die neue Application für die neue Stage für ArgoCD hinzufügen.

Die Source Datei ist unter /argocd und dort die petclinic-helm.yaml

Dort sind bereits 2 Application vorhanden für die beiden vorhandenen Stages „Production“ und „Staging“.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: petclinic-helm
  namespace: example-apps-staging
spec:
  destination:
    namespace: example-apps-staging
    server: https://kubernetes.default.svc
  project: example-apps
  source:
    path: apps/spring-petclinic-helm/staging
    repoURL: http://scmm-scm-manager.default.svc.cluster.local/scm/repo/argocd/example-apps
    targetRevision: main
    directory:
      recurse: true
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

---

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: petclinic-helm
  namespace: example-apps-production
spec:
  destination:
    namespace: example-apps-production
    server: https://kubernetes.default.svc
  project: example-apps
  source:
    path: apps/spring-petclinic-helm/production
    repoURL: http://scmm-scm-manager.default.svc.cluster.local/scm/repo/argocd/example-apps
    targetRevision: main
    directory:
      recurse: true
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Einfach die neue Stage darunter einfügen per Copy&Paste und leichten Anpassungen.

---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: petclinic-helm
  namespace: example-apps-qs
spec:
  destination:
    namespace: example-apps-qs
    server: https://kubernetes.default.svc
  project: example-apps
  source:
    path: apps/spring-petclinic-helm/qs
    repoURL: http://scmm-scm-manager.default.svc.cluster.local/scm/repo/argocd/example-apps
    targetRevision: main
    directory:
      recurse: true
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
example-apps-qs# Create a new namespace named example-apps-qs
  kubectl create namespace example-apps-qs

Nur noch Warten

Alle drei Repositories committen und pushen und warten bis der Jenkins gebaut hat.

In ArgoCD wird dann die Example App neu gesynct

In ArgoCD sieht man auch die Änderung

Und auch die App

Neue Stage ist online


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..