Skip to content

CI/CD Pipelines

Der AI Application Layer unterstützt zwei Ansätze für automatische Deployments:

AnsatzSicherheitKomplexitätEmpfohlen für
Manual Git Webhook (HMAC)HMAC-signiertNiedrigStandard — alle Projekte
Gitea Actions PipelineBearer Token in SecretMittelProjekte 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

Terminal window
openssl rand -hex 32
# Beispiel-Output: af08f79869319d5cfe3ff6044dfd7115982b7db49685e635e1bc3875a3a26672

Schritt 2: Secret in der Plattform setzen

Terminal window
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.

Terminal window
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:

Terminal window
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”:

NameWert
COOLIFY_TOKENEuer API-Token
APP_UUIDUUID der Anwendung auf der Plattform

Branch-Strategie

Eine bewährte Strategie für den Umgang mit mehreren Umgebungen:

BranchUmgebungDeployment
mainProduktionAutomatisch bei Push
stagingStagingAutomatisch bei Push
Feature-BranchesKein 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:

Terminal window
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}'