edp-doc/docs/userguide/petclinic.md

2.6 KiB

Spring's PetClinic

The PetClinic has been Spring's example project for years and is being updated with each new version of the framework. It consists of a simple, old-school Java webapp and a PostgreSQL relational database for persistence.

Within the IDP the PetClinic backstage template creates a copy of the PetClinic code, builds and deploys it. This demonstrates a golden path to set up an entire development and deployment pipeline of an example or starter application.

Instance Creation

To instantiate a new PetClinic instance, create a new project from the PetClinic template in Backstage. The template executes the following steps:

  1. Download the app source code from the given code repository
  2. Apply overrides for compatibility with Forgejo Actions.
  3. Create a new git repository in Forgejo and push the merged code.
  4. Create a new Deployment in ArgoCD.

After the code is pushed into Forgejo the configured workflows in the git repository are triggered. They compile, test and scan the project and finally push a container image into Forgejo's internal container registry.

At the same time, ArgoCD starts deploying the newly created instance of the PetClinic based on the kubernetes manifests located in the git repo. However, as the application is built from source, the webapp only becomes available as soon as the container image of the Java app is pushed into the container registry.

Eventually the new PetClinic will go live on a subdomain corresponding to the chosen name in the template, e.g. [https://mypetclinic.cnoe.localtest.me].

Build

The existing GitHub Actions workflows in the upstream PetClinic are overwritten by the app template as they are not 100% compatible with Forgejo Actions. This affects predominantly the coordinates of actions as Forgejo can download actions from other platforms and defaults to actions on code.forgejo.org. Thus, actions from GitHub have to be marked as such specifically.

Furthermore, the current setup does not support nested containerization, yet. Consequently, all container image builds and interactions avoid the need for a container engine and opt for alternative tooling such as Google Jib.

Deployment

ArgoCD creates a synchronized deployment from the resources in the git repository into a dedicated namespace. It contains the deployment of a PostgreSQL database and the PetClinic Java app, as well as ingress and monitoring definitions. The Prometheus instances included in the IDP stack is instructed to scrape data from exposed monitoring endpoints on the Java application.