Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:ffit:3-jahr:cicd:learningunits:lu09:b [2026/04/06 16:35] – apeter | de:modul:ffit:3-jahr:cicd:learningunits:lu09:b [2026/04/07 14:55] (aktuell) – apeter | ||
|---|---|---|---|
| Zeile 10: | Zeile 10: | ||
| Konkrete Beispiele: | Konkrete Beispiele: | ||
| - | * " | + | * " |
| - | * " | + | * " |
| <code ini> | <code ini> | ||
| Zeile 19: | Zeile 19: | ||
| </ | </ | ||
| - | Das bedeutet, dass im Frontend sichergestellt werden muss, dass Aufrufe des Backends die richtige URL (/ | + | Das bedeutet, dass im Frontend sichergestellt werden muss, dass Aufrufe des Backends die richtige URL verwenden. |
| ^ Pipeline ^ Frontend ^ | ^ Pipeline ^ Frontend ^ | ||
| | < | | < | ||
| <code bash> | <code bash> | ||
| npm install | npm install | ||
| - | REACT_APP_API_BASE=/ | + | REACT_APP_API_BASE=/ |
| npm run build | npm run build | ||
| </ | </ | ||
| Zeile 45: | Zeile 45: | ||
| BACKEND_CONTAINER | BACKEND_CONTAINER | ||
| ... | ... | ||
| - | docker build -t $BACKEND_CONTAINER | + | docker build -t $BACKEND_CONTAINER backend/ |
| docker run -d \ | docker run -d \ | ||
| --name $BACKEND_CONTAINER \ | --name $BACKEND_CONTAINER \ | ||
| + | ... | ||
| + | $BACKEND_CONTAINER | ||
| </ | </ | ||
| </ | </ | ||
| Zeile 56: | Zeile 58: | ||
| </ | </ | ||
| - | <WRAP round info 60%> | + | Die Datenbank muss wiederum so konfiguriert werden, dass sie vom Backend angesprochen werden kann. |
| - | Hinweis: Es ist gebräuchlich | + | < |
| + | Die Credentials werden hier im Klartext verwendet, damit die Funktionsweise klarer ist. In der Praxis werden natürlich Secrets dafür | ||
| </ | </ | ||
| - | '' | + | |
| + | ^ Pipeline Backend ^ Pipeline Datenbank ^ | ||
| + | | < | ||
| + | <code bash> | ||
| + | DB_CONTAINER | ||
| + | DB_USER | ||
| + | DB_PASSWORD | ||
| + | DB_NAME | ||
| + | ... | ||
| + | -e DATABASE_URL=" | ||
| + | </ | ||
| + | </ | ||
| + | <code bash> | ||
| + | docker run -d \ | ||
| + | --name $DB_CONTAINER \ | ||
| + | -e POSTGRES_USER=$DB_USER \ | ||
| + | -e POSTGRES_PASSWORD=$DB_PASSWORD \ | ||
| + | -e POSTGRES_DB=$DB_NAME \ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Beispiel-Deployment ==== | ||
| + | Alle Stages für das Deployment von https:// | ||
| + | |||
| + | <code bash> | ||
| + | pipeline { | ||
| + | agent any | ||
| + | |||
| + | environment { | ||
| + | PROJECT_NAME | ||
| + | BRANCH_NAME | ||
| + | REPO_URL | ||
| + | TARGET_DIR | ||
| + | SONAR_SCANNER_OPTS = " | ||
| + | BACKEND_CONTAINER | ||
| + | DB_CONTAINER | ||
| + | DB_VOLUME | ||
| + | DB_USER | ||
| + | DB_PASSWORD | ||
| + | DB_NAME | ||
| + | } | ||
| + | |||
| + | stages { | ||
| + | stage('Checkout') { | ||
| + | steps { | ||
| + | git branch: BRANCH_NAME, | ||
| + | url: REPO_URL | ||
| + | } | ||
| + | } | ||
| + | |||
| + | stage('Start Database') { | ||
| + | when { | ||
| + | expression { false } | ||
| + | } | ||
| + | steps { | ||
| + | sh ''' | ||
| + | echo " | ||
| + | |||
| + | docker stop $DB_CONTAINER || true | ||
| + | docker rm $DB_CONTAINER || true | ||
| + | |||
| + | docker run -d \ | ||
| + | --name $DB_CONTAINER \ | ||
| + | --network infra-net \ | ||
| + | -e POSTGRES_USER=$DB_USER \ | ||
| + | -e POSTGRES_PASSWORD=$DB_PASSWORD \ | ||
| + | -e POSTGRES_DB=$DB_NAME \ | ||
| + | -v $DB_VOLUME:/ | ||
| + | -v $WORKSPACE/ | ||
| + | postgres: | ||
| + | ''' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | stage(' | ||
| + | when { | ||
| + | expression { false } | ||
| + | } | ||
| + | steps { | ||
| + | sh ''' | ||
| + | TABLE_EXISTS=$(docker exec $DB_CONTAINER psql -U $DB_USER -d $DB_NAME -tAc " | ||
| + | if [ " | ||
| + | echo " | ||
| + | docker exec -i $DB_CONTAINER psql -U $DB_USER -d $DB_NAME < database/ | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | ''' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | stage(' | ||
| + | when { | ||
| + | expression { false } | ||
| + | } | ||
| + | steps { | ||
| + | dir(' | ||
| + | sh ''' | ||
| + | npm install | ||
| + | GENERATE_SOURCEMAP=false \ | ||
| + | NODE_OPTIONS=" | ||
| + | PUBLIC_URL=/ | ||
| + | REACT_APP_API_BASE=/ | ||
| + | npm run build | ||
| + | ''' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | stage(' | ||
| + | when { | ||
| + | expression { false } | ||
| + | } | ||
| + | steps { | ||
| + | sh ''' | ||
| + | echo " | ||
| + | |||
| + | mkdir -p " | ||
| + | rm -rf " | ||
| + | |||
| + | cp -r frontend/ | ||
| + | ''' | ||
| + | } | ||
| + | } | ||
| + | |||
| + | stage(' | ||
| + | when { | ||
| + | expression { false } | ||
| + | } | ||
| + | steps { | ||
| + | sh ''' | ||
| + | docker build -t $BACKEND_CONTAINER backend/ | ||
| + | |||
| + | docker stop $BACKEND_CONTAINER || true | ||
| + | docker rm $BACKEND_CONTAINER || true | ||
| + | |||
| + | docker run -d \ | ||
| + | --name $BACKEND_CONTAINER \ | ||
| + | --network infra-net \ | ||
| + | -e DATABASE_URL=" | ||
| + | $BACKEND_CONTAINER | ||
| + | ''' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||