Software Templates
Standardisierte Projektvorlagen für .NET, React und Plattform-Services
Software Templates erzeugen nicht nur Code. Sie bereiten Catalog-Entity, TechDocs, CI/CD, SonarCloud-Projekt, Azure-DevOps-Struktur und AccessHub-Mapping vor.
6
Gesamt im Katalog
5
Freigegebene Vorlagen
53
Erzeugte Services
3
Plattform-Teams
Nutzungstrend (6 Monate)
Template Lifecycle
Template Author entwickelt, noch nicht freigegeben, keine öffentliche Sichtbarkeit
Plattform-Review, Security-Review, TechDocs-Check, Pilot mit 1-2 Teams
Freigegeben für alle Teams, katalogisiert, SLA für Pflege gilt
Nur Wartung, neue Scaffolds blockiert, Migration-Guide vorhanden
Templates
.NET Web API
Standard-API mit OpenAPI, Health Checks, Logging, SonarCloud
React Frontend
Frontend mit Build, Tests, Security Headers, TechDocs
.NET Worker
Hintergrunddienst mit Queue-/Event-Verarbeitung
Shared Library
Bibliothek mit Versionierung, Tests, SonarCloud-Projekt
Full Stack Service
API + Frontend + Infrastruktur-Grundstruktur
TechDocs Site
Reine Dokumentations-Entity ohne Code-Service
Artifact-Matrix pro Template
Welche Artefakte werden beim Scaffolding erzeugt?
| Template | Repo | catalog-info | TechDocs | CI/CD | SonarCloud | ADO / GH | AccessHub | Security Doc |
|---|---|---|---|---|---|---|---|---|
| .NET Web API | ||||||||
| React Frontend | ||||||||
| .NET Worker | ||||||||
| Shared Library | ||||||||
| Full Stack Service | ||||||||
| TechDocs Site |
Scaffolding-Pipeline
Schritt-für-Schritt Ausführung beim Anlegen eines neuen Service
- 1
fetch:template
2-4sTemplate-Skeleton aus Repo oder Registry laden
- 2
render:parameters
1sBenutzereingaben ersetzen (name, owner, tenant, description)
- 3
publish:repository
8-15sNeues Repo in Azure DevOps / GitHub anlegen, Default Branch und Policies setzen
- 4
register:catalog
3-6scatalog-info.yaml committen, Location im Backstage Catalog registrieren
- 5
provision:sonar
5-10sSonarCloud-Projekt erzeugen oder beantragen, Quality Gate verknüpfen
- 6
provision:pipeline
10-20sCI/CD anlegen, Service Connection zuweisen, Branch Policies aktivieren
- 7
provision:access
4-8sAccessHub-Rollenpaket für das neue Service-Ownership-Team vorbereiten
- 8
notify:owner
1-2sOwner und Platform-Team per Notification informieren, Onboarding-Checklist anhängen
Parameter-Beispiel (Backstage Scaffolder)
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: hermos-dotnet-webapi
title: HERMOS .NET Web API
description: Standard-API mit OpenAPI, Health Checks, Logging, SonarCloud
tags: [dotnet, webapi, hermos-v3]
spec:
owner: group:default/platform-core
type: service
parameters:
- title: Service Identität
required: [serviceName, owner, tenant, criticality]
properties:
serviceName:
type: string
title: Service-Name
pattern: '^[a-z][a-z0-9-]{2,40}$'
description: Kleinbuchstaben, Zahlen, Bindestrich. Kein Präfix env/tenant
owner:
type: string
title: Owner Team
ui:field: OwnerPicker
ui:options: { allowedKinds: [Group] }
tenant:
type: string
title: Zieltenant
enum: [tnt.hermos.com, fis.hermos.com, fise.hermos.com, dso.hermos.com]
criticality:
type: string
enum: [low, medium, high, critical]
repoVisibility:
type: string
enum: [private, internal]
default: private
- title: Technische Konfiguration
properties:
targetFramework:
type: string
enum: ['net8.0', 'net9.0']
default: 'net9.0'
enableOpenTelemetry:
type: boolean
default: true
steps:
- id: fetch
action: fetch:template
input:
url: ./skeleton
values:
serviceName: ${{ parameters.serviceName }}
- id: publish
action: publish:azure
input:
repoUrl: dev.azure.com?repo=${{ parameters.serviceName }}
- id: register
action: catalog:register
input:
repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
catalogInfoPath: '/catalog-info.yaml'Versions-Historie
| Template | Version | Released | Änderung | Breaking |
|---|---|---|---|---|
| .NET Web API | 2.4.1 | 2026-04-10 | OpenTelemetry-Default, net9.0 Support | minor |
| .NET Web API | 2.4.0 | 2026-03-15 | Health-Check-Endpoint, SonarCloud-Integration v2 | minor |
| .NET Web API | 2.3.0 | 2026-01-20 | Azure Key Vault Reference Support | minor |
| .NET Web API | 2.0.0 | 2025-11-05 | Major: net8.0, Minimal API statt Controller | breaking |
| React Frontend | 3.1.0 | 2026-04-14 | React 19, Vite 6 | minor |
| React Frontend | 3.0.0 | 2026-02-10 | Major: Vite statt Webpack, TypeScript strict | breaking |
| .NET Worker | 1.8.3 | 2026-03-22 | Azure Service Bus Renewal-Handler | minor |
| Full Stack Service | 0.9.0-rc.2 | 2026-04-18 | Release Candidate 2 (Review) | minor |
Quality Gates vor Publish
| Gate | Beschreibung | Blocking |
|---|---|---|
| Template Linter | Strukturprüfung der Template-YAML (apiVersion, kind, spec.owner) | blocking |
| Parameter-Validierung | Pflichtfelder, Regex-Muster, enum-Werte vollständig | blocking |
| Security Review | Keine hardkodierten Secrets, keine öffentlichen Endpoints ohne Auth | blocking |
| TechDocs-Rendering | mkdocs.yml wird erfolgreich generiert, keine Broken Links | blocking |
| SonarCloud Mapping | Mapping-Block vorhanden oder explizite Ausnahme mit Begründung | warn |
| Ownership Plausibilität | Owner-Team existiert in Backstage Catalog und hat Mitglieder | blocking |
| Pipeline Dry-Run | CI/CD-Template läuft fehlerfrei gegen Sandbox-Tenant | blocking |
| Dependency-Scan | Keine kritischen CVEs in Template-Dependencies | blocking |
Known Issues
| ID | Template | Issue | Severity | Workaround | Fix in |
|---|---|---|---|---|---|
| TPL-042 | .NET Worker | Service Bus Listener race bei Multi-Instance | medium | Partition Receiver aktivieren | 1.9.0 |
| TPL-051 | React Frontend | Vite Dev-Server Port-Konflikt bei 3+ parallel Scaffolds | low | VITE_PORT vor Start setzen | keine |
| TPL-067 | Full Stack Service | AccessHub-Mapping fehlt initial, muss manuell ergänzt werden | high | Nach Scaffolding manuell Rollenpaket beantragen | 1.0.0 |
Deprecation- / Rollback-Prozess
- 1
Deprecation mark
Template-Status auf deprecated setzen, neue Scaffolds sofort blockiert
- 2
Notification
Teams mit laufenden Services informieren (Services aus Catalog filtern)
- 3
Migration-Guide
Migration-Pfad zum Nachfolger-Template in TechDocs publizieren
- 4
Grace Period
Mindestens 90 Tage Bestandsschutz für Bestandsservices
- 5
Archive
Template-Repo read-only, Catalog-Entity als archived markieren
Erzeugte Artefakte
- 1Repository oder Projektstruktur
- 2catalog-info.yaml für Backstage
- 3mkdocs.yml und TechDocs-Grundstruktur
- 4CI/CD-Grundpipeline
- 5SonarCloud-Projektverknüpfung oder Beantragung
- 6Azure-DevOps- oder GitHub-Einstellungen
- 7AccessHub-Entitlement-Mapping
- 8Security-Grunddokumentation mit OWASP-Platzhaltern
Rechte-Matrix (Template-Aktionen)
| Aktion | Viewer | Developer | Tech Lead | Platform |
|---|---|---|---|---|
| Template ansehen | ||||
| Template ausführen (scaffold) | ||||
| Prod-kritisches Template ausführen | ||||
| Template ändern / neue Version | ||||
| Template deprecation | ||||
| Scaffolding-Logs einsehen | ||||
| Parameter-Schema ändern | ||||
| Template in anderem Tenant veröffentlichen |
Compliance-Mapping
| Aspekt | Frameworks / Normen |
|---|---|
| Ownership verpflichtend | ISO 27001 A.6.1, NIS2 Art.21 |
| Security-Scan Pflicht | ISO 27001 A.14.2, OWASP SAMM |
| TechDocs verpflichtend | ISO 27001 A.8.1, Interne Revision |
| Branch Policies enforced | ISO 27001 A.14.2.2, SOC 2 CC8.1 |
| SBOM für Releases | EU Cyber Resilience Act, NIST SP 800-218 |
| Least-Privilege RBAC | ISO 27001 A.9.2, BSI IT-Grundschutz |
Controls / Governance
| Aktion | Steuerung |
|---|---|
| Template ansehen | Backstage Permission |
| Template ausführen | Backstage Permission + AccessHub-Rollenpaket |
| Template ändern | Plattformteam / Template Author |
| Prod-fähiges Template nutzen | Zusätzliche Genehmigung / Teamreifegrad |
| SonarCloud-Projekt automatisch anlegen | AccessHub- oder Plattform-Fulfillment |
| Azure DevOps Service Connection erzeugen | Restriktiver Plattformprozess |
Semantic Versioning
Templates folgen MAJOR.MINOR.PATCH. Breaking Changes nur in MAJOR, Feature-Additionen in MINOR, Bugfixes in PATCH.
Template-Repo-Struktur
Jedes Template enthält template.yaml, skeleton/, docs/, tests/ und CHANGELOG.md. Pull Requests erzwingen Review.
Pipeline Dry-Run
Vor jedem Release wird das Template gegen einen Sandbox-Tenant ausgeführt und automatisch wieder aufgeräumt.