CI/CD (Continuous Integration / Continuous Deployment)
Automatisierte Prozesse, die Code-Änderungen kontinuierlich testen (CI) und in Produktion bringen (CD) – für schnellere und zuverlässigere Software-Releases.
Konfigurationsschalter, die es ermöglichen, Features im laufenden Betrieb ein- und auszuschalten – ohne neues Deployment. Ermöglichen Canary Releases, A/B-Tests und sofortige Rollbacks.
Traditionelles Deployment: Code schreiben → mergen → deployen → Feature ist live. Wenn etwas schiefläuft, braucht man einen Hotfix und ein neues Deployment – das dauert.
Feature Flags trennen Deployment von Release: Der Code wird deployt, aber das Feature ist zunächst deaktiviert. Wenn alles bereit ist, wird der Flag umgelegt – in Sekunden, ohne Deployment. Bei Problemen: Flag zurückschalten, sofort.
Deployment vs. Release:
Ohne Feature Flags:
Code fertig → Deploy → Feature live (alles auf einmal)
Mit Feature Flags:
Code fertig → Deploy (Flag = off) → Testen → Flag = on für 5% → Flag = on für 100%
Flag-Typen:
| Typ | Lebensdauer | Beispiel |
|---|---|---|
| Release Flag | Kurzfristig | Neues Dashboard ausrollen |
| Experiment Flag | Kurzfristig | A/B-Test Prompt-Varianten |
| Ops Flag | Mittelfristig | Cache aktivieren/deaktivieren |
| Kill Switch | Langfristig | Notfall-Deaktivierung |
| Permission Flag | Langfristig | Beta-Nutzer-Zugang |
// flags.ts
const flags = await fetchFlags(userId);
if (flags.isEnabled('new-llm-model')) {
return await callGPT4o(prompt);
} else {
return await callGPT4oMini(prompt);
}
import * as LaunchDarkly from '@launchdarkly/node-server-sdk';
const client = LaunchDarkly.init(process.env.LD_SDK_KEY);
await client.waitForInitialization();
const user = {
key: userId,
email: userEmail,
custom: { plan: 'pro', region: 'eu' },
};
// Flag mit Targeting: nur Pro-Nutzer in EU
const useNewModel = await client.variation('new-llm-model', user, false);
if (useNewModel) {
return await callNewModel(prompt);
}
from UnleashClient import UnleashClient
client = UnleashClient(
url="https://unleash.example.com/api",
app_name="ki-assistent",
custom_headers={"Authorization": "Bearer <token>"},
)
client.initialize_client()
if client.is_enabled("new-rag-pipeline", {"userId": user_id}):
result = new_rag_pipeline(query)
else:
result = legacy_rag_pipeline(query)
// 10% der Nutzer bekommen das neue Feature
const rolloutConfig = {
flagKey: 'new-chat-ui',
percentage: 10, // Woche 1
// percentage: 50, // Woche 2
// percentage: 100, // Woche 3 – vollständiger Rollout
}; Feature Flags sind wie Lichtschalter in einem Haus: Das Kabel (Code) ist bereits verlegt, aber das Licht (Feature) geht erst an, wenn du den Schalter umlegt. Du kannst einzelne Zimmer beleuchten, ohne das ganze Haus neu zu verdrahten.
Features können im laufenden Betrieb aktiviert/deaktiviert werden – kein Deployment nötig
Ermöglichen Trunk-Based Development: Code wird gemergt, aber noch nicht aktiviert
Basis für Canary Releases, A/B-Tests und sofortige Rollbacks
Canary Release
Neues KI-Modell zunächst nur für 5% der Nutzer aktivieren – bei Problemen sofort zurückschalten
A/B-Testing
Zwei Prompt-Varianten für verschiedene Nutzergruppen testen ohne Deployment
Notfall-Rollback
Fehlerhaftes Feature in Sekunden deaktivieren – ohne Hotfix und Deployment
Beta-Programme
Neue Features nur für ausgewählte Nutzer oder Teams freischalten
Environment Variables werden beim Start der Anwendung gesetzt und erfordern einen Neustart zum Ändern. Feature Flags können zur Laufzeit geändert werden – ohne Deployment oder Neustart. Außerdem unterstützen Feature Flags Targeting (nur für bestimmte Nutzer aktivieren), was Environment Variables nicht können.
Feature Flags sollten temporär sein. Jedes Flag bekommt ein Ablaufdatum. Nach dem vollständigen Rollout wird der Flag-Code entfernt. Ein Flag-Inventar mit Eigentümer und geplantem Entfernungsdatum hilft. Langlebige Flags (Kill Switches, Ops Flags) sind Ausnahmen und sollten explizit als solche markiert sein.
Release Flags: Neues Feature schrittweise ausrollen. Experiment Flags: A/B-Tests. Ops Flags: System-Verhalten steuern (z. B. Cache aktivieren). Permission Flags: Features für bestimmte Nutzergruppen. Kill Switch: Feature bei Problemen sofort deaktivieren.