CI/CD Pipelines
Der AI Application Layer unterstützt zwei Ansätze für automatische Deployments:
| Ansatz | Sicherheit | Komplexität | Empfohlen für |
|---|---|---|---|
| Manual Git Webhook (HMAC) | HMAC-signiert | Niedrig | Standard — alle Projekte |
| Gitea Actions Pipeline | Bearer Token in Secret | Mittel | Projekte mit Tests/Build-Schritten |
Option 1: Manual Git Webhook (empfohlen)
Gitea signiert jeden Webhook-Request mit einem gemeinsamen HMAC-Secret. Die Plattform prüft die Signatur — nur Requests mit korrekter Signatur lösen ein Deployment aus.
Schritt 1: Secret generieren
openssl rand -hex 32# Beispiel-Output: af08f79869319d5cfe3ff6044dfd7115982b7db49685e635e1bc3875a3a26672Schritt 2: Secret in der Plattform setzen
curl -s -X PATCH https://coolai.btc-ag.cloud/api/v1/applications/<app-uuid> \ -H "Authorization: Bearer $COOLIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"manual_webhook_secret_gitea": "<euer-secret>"}'Schritt 3: Gitea Webhook anlegen
Immer POST verwenden (nicht PATCH) — nur so wird das Secret korrekt gespeichert.
GITEA_TOKEN="<euer-gitea-token>"GITEA_URL="https://git.coolai.btc-ag.cloud"REPO_OWNER="meinteam"REPO_NAME="meine-app"SECRET="<euer-secret-aus-schritt-1>"
curl -s -X POST "$GITEA_URL/api/v1/repos/$REPO_OWNER/$REPO_NAME/hooks" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"type\": \"gitea\", \"config\": { \"url\": \"https://coolai.btc-ag.cloud/webhooks/source/gitea/events/manual\", \"content_type\": \"json\", \"secret\": \"$SECRET\" }, \"events\": [\"push\"], \"branch_filter\": \"main\", \"active\": true }"Prüfen ob der Webhook funktioniert
Nach dem nächsten git push auf main sollte im Dashboard ein neues Deployment erscheinen mit is_webhook: true:
curl -s "https://coolai.btc-ag.cloud/api/v1/deployments/applications/<app-uuid>" \ -H "Authorization: Bearer $COOLIFY_TOKEN" \ | jq '.deployments[0] | {status, is_webhook, created_at}'Option 2: Gitea Actions Pipeline
Für Projekte, die vor dem Deployment Tests, Linting oder komplexere Build-Schritte benötigen.
Beispiel: Node.js App mit Tests
Datei: .gitea/workflows/deploy.yml
name: Build, Test & Deploy
on: push: branches: - main
jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- name: Node.js einrichten uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm'
- name: Abhängigkeiten installieren run: npm ci
- name: Tests ausführen run: npm test
deploy: needs: test runs-on: ubuntu-latest steps: - name: Deployment auslösen run: | curl -s -X GET \ "https://coolai.btc-ag.cloud/api/v1/deploy?uuid=${{ secrets.APP_UUID }}&force=false" \ -H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}"Secrets in Gitea hinterlegen
Repository → Settings → Secrets → “Neues Secret”:
| Name | Wert |
|---|---|
COOLIFY_TOKEN | Euer API-Token |
APP_UUID | UUID der Anwendung auf der Plattform |
Branch-Strategie
Eine bewährte Strategie für den Umgang mit mehreren Umgebungen:
| Branch | Umgebung | Deployment |
|---|---|---|
main | Produktion | Automatisch bei Push |
staging | Staging | Automatisch bei Push |
| Feature-Branches | – | Kein automatisches Deployment |
Richtet dafür je eine Anwendung (mit eigener Domain und eigenem Webhook) pro Umgebung ein.
Deployment-Status prüfen
Nach einem Webhook-Trigger den aktuellen Status abfragen:
curl -s "https://coolai.btc-ag.cloud/api/v1/deployments/applications/<app-uuid>" \ -H "Authorization: Bearer $COOLIFY_TOKEN" \ | jq '.deployments[0] | {status, is_webhook, created_at}'