Zum Inhalt springen

CI/CD Integration

ReadyStackGo lässt sich in automatisierte Build- und Release-Prozesse integrieren. Über API Keys und Webhook-Endpoints können CI/CD Pipelines Deployments auslösen, Upgrades durchführen und den Stack-Katalog synchronisieren.

Use CaseWebhookBeschreibung
Dev/Test/api/hooks/redeployNach jedem Build automatisch den Stack redeployen (frische Images)
Release/api/hooks/upgradeAuf eine neue Katalog-Version upgraden
Katalog-Sync/api/hooks/sync-sourcesNach Manifest-Änderungen den Katalog aktualisieren

Pipeline-Zugriff erfolgt über API Keys statt JWT Tokens. So erstellen Sie einen Key:

Navigieren Sie zu Settings im Hauptmenü. Sie sehen dort den Eintrag CI/CD Integration.

Settings-Seite mit CI/CD Integration


Klicken Sie auf CI/CD Integration. Wenn noch keine Keys erstellt wurden, sehen Sie eine leere Seite mit dem Button Create API Key.

CI/CD Seite ohne API Keys


Klicken Sie auf Create API Key und füllen Sie das Formular aus:

  • Name – Ein beschreibender Name (z.B. “Azure DevOps Deploy”)
  • Permissions – Wählen Sie die benötigten Berechtigungen:
    • Redeploy – Stack mit frischen Images neu starten
    • Upgrade – Stack auf neue Katalog-Version upgraden
    • Sync Sources – Katalog-Quellen synchronisieren
  • Environment (optional) – Beschränkt den Key auf ein bestimmtes Environment
  • Expiry (optional) – Ablaufdatum setzen

Create API Key Modal mit ausgefülltem Formular


Nach dem Erstellen wird der vollständige API Key einmalig angezeigt. Kopieren Sie ihn sofort – er wird danach nicht mehr angezeigt!

API Key erstellt – Kopieren Sie den Key sofort

Speichern Sie den Key als Secret in Ihrem CI/CD System (z.B. Azure DevOps Variable Group, GitHub Secret).


Der erstellte Key erscheint in der Übersicht mit Name, Permissions, Environment, Ablaufdatum und Status.

API Key Liste mit dem neuen Key


Alle Endpoints befinden sich unter /api/hooks/ und erfordern API Key Authentifizierung via X-Api-Key Header.

Triggert ein Redeployment eines laufenden Stacks oder Product Deployments. Stoppt die bestehenden Container, pullt frische Images und startet neu – mit denselben Variablen und Einstellungen.

Unterstützt zwei Modi:

  • Standalone Stack Redeploy: Mit stackName – einzelner Stack wird redeployed
  • Product Redeploy: Mit productId – alle oder ausgewählte Stacks eines Product Deployments werden redeployed

Parameter:

FeldTypPflichtBeschreibung
stackNamestringBedingt*Name des deployten Stacks. *Pflicht wenn kein productId.
productIdstringBedingt*Product GroupId (z.B. ams.project). *Pflicht wenn kein stackName.
stackDefinitionNamestringNeinNur bei productId: Name des Stacks innerhalb des Produkts. Wenn leer: alle Stacks.
environmentIdstringNein**ID des Environments. **Entfällt bei environment-gebundenem API Key.
variablesobjectNeinVariable Overrides als Key-Value-Paare

Request (Standalone Stack):

{
"stackName": "ams-project",
"environmentId": "abc123-def4-..."
}

Request (Product – alle Stacks):

{
"productId": "ams.project"
}

Request (Product – einzelner Stack mit Overrides):

{
"productId": "ams.project",
"stackDefinitionName": "Analytics",
"variables": { "BUILD_NUM": "42" }
}

Response (200) – Stack:

{
"success": true,
"message": "Successfully triggered redeploy of 'ams-project'.",
"deploymentId": "d4f8b2...",
"stackName": "ams-project",
"stackVersion": "6.4.0"
}

Response (200) – Product:

{
"success": true,
"message": "Successfully triggered redeploy of product 'AMS Project'.",
"productDeploymentId": "p1d2e3...",
"stackName": "AMS Project",
"stackVersion": "6.4.0"
}

Fehler-Responses:

// 400 – Weder stackName noch productId
{ "success": false, "message": "Either stackName or productId is required." }
// 400 – Stack nicht gefunden
{ "success": false, "message": "No deployment found for stack 'xyz' in environment '...'" }
// 400 – Product Deployment nicht gefunden
{ "success": false, "message": "No active product deployment found for product 'xyz' in environment '...'" }
// 400 – Nicht im Status Running
{ "success": false, "message": "Only running deployments can be redeployed. Current status: Failed" }

Permission: Hooks.Redeploy


Upgradet einen Stack auf eine bestimmte Katalog-Version. Prüft die Version im Katalog, merged optionale neue Variablen und delegiert an den bestehenden Upgrade-Flow.

Parameter:

FeldTypPflichtBeschreibung
stackNamestringJaName des deployten Stacks
targetVersionstringJaZielversion aus dem Katalog (z.B. "6.5.0")
environmentIdstringNein*ID des Environments. *Entfällt bei environment-gebundenem API Key.
variablesobjectNeinZusätzliche oder geänderte Variablen als Key-Value-Paare

Request:

{
"stackName": "ams-project",
"targetVersion": "6.5.0",
"environmentId": "abc123-def4-...",
"variables": {
"NEW_SETTING": "value"
}
}

Response (200):

{
"success": true,
"message": "Successfully upgraded 'ams-project' from 6.4.0 to 6.5.0.",
"deploymentId": "d4f8b2...",
"previousVersion": "6.4.0",
"newVersion": "6.5.0"
}

Fehler-Responses:

// 400 – Version nicht im Katalog
{ "success": false, "message": "Version '9.9.9' not found in catalog. Available versions: 6.4.0, 6.5.0" }
// 400 – Stack nicht im Status Running
{ "success": false, "message": "Deployment is in status 'Failed', only running deployments can be upgraded." }

Permission: Hooks.Upgrade


Synchronisiert alle Stack-Katalog-Quellen (lokale Verzeichnisse und Git Repositories). Nützlich nach einem Git Push mit aktualisierten Manifests.

Parameter: Kein Request Body erforderlich.

Response (200):

{
"success": true,
"stacksLoaded": 12,
"sourcesSynced": 3,
"message": "Synced 3 source(s), loaded 12 stack(s)."
}

Permission: Hooks.SyncSources


HTTP StatusBedeutung
200Erfolg
400Ungültige Anfrage (Stack nicht gefunden, ungültige Version, Stack nicht Running)
401Nicht authentifiziert (fehlender oder ungültiger API Key)
403Nicht autorisiert (API Key hat nicht die benötigte Permission)
500Server-Fehler

Terminal-Fenster
# Redeploy (frische Images)
curl -sf -X POST https://rsgo.example.com/api/hooks/redeploy \
-H "X-Api-Key: rsgo_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
-H "Content-Type: application/json" \
-d '{"stackName": "ams-project"}'
# Katalog synchronisieren
curl -sf -X POST https://rsgo.example.com/api/hooks/sync-sources \
-H "X-Api-Key: rsgo_..."
# Upgrade auf neue Version
curl -sf -X POST https://rsgo.example.com/api/hooks/upgrade \
-H "X-Api-Key: rsgo_..." \
-H "Content-Type: application/json" \
-d '{"stackName": "ams-project", "targetVersion": "6.5.0"}'

Das -sf Flag sorgt dafür, dass curl bei HTTP-Fehlern (401, 403, 500) mit einem Fehlercode abbricht – wichtig damit die Pipeline bei Fehlern stoppt.

- name: Trigger Redeploy
run: |
curl -sf -X POST "${{ secrets.RSGO_URL }}/api/hooks/redeploy" \
-H "X-Api-Key: ${{ secrets.RSGO_API_KEY }}" \
-H "Content-Type: application/json" \
-d '{"stackName": "${{ vars.STACK_NAME }}"}'
- script: |
curl -sf -X POST "$(RSGO_URL)/api/hooks/redeploy" \
-H "X-Api-Key: $(RSGO_API_KEY)" \
-H "Content-Type: application/json" \
-d '{"stackName": "$(STACK_NAME)"}'
displayName: Trigger Redeploy on ReadyStackGo

Erstellen Sie wiederverwendbare Templates in Ihrem Repository:

templates/rsgo-redeploy.yml:

parameters:
- name: stackName
type: string
steps:
- script: |
curl -sf -X POST "$(RSGO_URL)/api/hooks/redeploy" \
-H "X-Api-Key: $(RSGO_API_KEY)" \
-H "Content-Type: application/json" \
-d '{"stackName": "${{ parameters.stackName }}"}'
displayName: Redeploy ${{ parameters.stackName }}

templates/rsgo-sync-upgrade.yml:

parameters:
- name: stackName
type: string
- name: targetVersion
type: string
steps:
- script: |
curl -sf -X POST "$(RSGO_URL)/api/hooks/sync-sources" \
-H "X-Api-Key: $(RSGO_API_KEY)"
displayName: Sync Catalog Sources
- script: |
curl -sf -X POST "$(RSGO_URL)/api/hooks/upgrade" \
-H "X-Api-Key: $(RSGO_API_KEY)" \
-H "Content-Type: application/json" \
-d '{"stackName": "${{ parameters.stackName }}", "targetVersion": "${{ parameters.targetVersion }}"}'
displayName: Upgrade ${{ parameters.stackName }} to ${{ parameters.targetVersion }}

Verwendung in der Pipeline:

steps:
- template: templates/rsgo-redeploy.yml
parameters:
stackName: ams-project
steps:
- template: templates/rsgo-sync-upgrade.yml
parameters:
stackName: ams-project
targetVersion: '6.5.0'

Benötigte Pipeline-Variablen:

VariableTypBeschreibung
RSGO_URLSecretReadyStackGo Server URL (z.B. https://rsgo.example.com)
RSGO_API_KEYSecretAPI Key mit den benötigten Permissions
STACK_NAMENormalName des zu deployenden Stacks (nur bei Inline-Aufrufen)

  • API Keys werden als SHA-256 Hash in der Datenbank gespeichert
  • Keys haben das Format rsgo_ + 32 alphanumerische Zeichen (~190 Bit Entropie)
  • Keys können jederzeit widerrufen werden (Settings → CI/CD → Revoke)
  • Optional: Environment-Scope beschränkt den Key auf ein bestimmtes Environment
  • Ablaufdatum kann pro Key konfiguriert werden