Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:ffit:3-jahr:cicd:learningunits:lu09:b [2026/04/06 21:57] apeterde:modul:ffit:3-jahr:cicd:learningunits:lu09:b [2026/04/07 14:55] (aktuell) apeter
Zeile 10: Zeile 10:
  
 Konkrete Beispiele: Konkrete Beispiele:
-  * "http://54.80.83.95/api/cicd/develop/polls" -> "cicd_develop_backend:5000/polls" +  * "http://54.80.83.95/api/cicd/develop/api/polls" -> "cicd_develop_backend:5000/api/polls" 
-  * "http://54.80.83.95/api/cicd/develop/votes" -> "cicd_develop_backend:5000/votes"+  * "http://54.80.83.95/api/cicd/develop/api/votes" -> "cicd_develop_backend:5000/api/votes"
  
 <code ini> <code ini>
Zeile 45: Zeile 45:
 BACKEND_CONTAINER  = "${PROJECT_NAME}_${BRANCH_NAME}_backend" BACKEND_CONTAINER  = "${PROJECT_NAME}_${BRANCH_NAME}_backend"
 ... ...
-docker build -t $BACKEND_CONTAINER -f Dockerfile.backend .+docker build -t $BACKEND_CONTAINER backend/
 docker run -d \ docker run -d \
     --name $BACKEND_CONTAINER \     --name $BACKEND_CONTAINER \
 +    ...
 +    $BACKEND_CONTAINER
 </code> </code>
 </WRAP> | <WRAP> </WRAP> | <WRAP>
Zeile 56: Zeile 58:
 </WRAP> | </WRAP> |
  
-<WRAP round info 60%> +Die Datenbank muss wiederum so konfiguriert werden, dass sie vom Backend angesprochen werden kann. 
-**Hinweis:** Es ist gebräuchlich die Datenbank und das Backend in separaten Containern laufen zu lassenIm Beispiel wird aus Gründen von Speicherplatz nur ein Container verwendet. Das Prinzip bleibt jedoch dasselbe.+<WRAP center round info 60%> 
 +Die Credentials werden hier im Klartext verwendet, damit die Funktionsweise klarer istIn der Praxis werden natürlich Secrets dafür verwendet.
 </WRAP> </WRAP>
  
-''TODO''+ 
 +^ Pipeline Backend ^ Pipeline Datenbank ^ 
 +| <WRAP> 
 +<code bash> 
 +DB_CONTAINER       = "${PROJECT_NAME}_${BRANCH_NAME}_db" 
 +DB_USER            = "appuser" 
 +DB_PASSWORD        = "apppassword" 
 +DB_NAME            = "appdb" 
 +... 
 +    -e DATABASE_URL="postgresql://$DB_USER:$DB_PASSWORD@$DB_CONTAINER:5432/$DB_NAME"
 +</code> 
 +</WRAP> | <WRAP> 
 +<code bash> 
 +docker run -d \ 
 +    --name $DB_CONTAINER \ 
 +    -e POSTGRES_USER=$DB_USER \ 
 +    -e POSTGRES_PASSWORD=$DB_PASSWORD \ 
 +    -e POSTGRES_DB=$DB_NAME \ 
 +</code> 
 +</WRAP>
 + 
 +==== Beispiel-Deployment ==== 
 +Alle Stages für das Deployment von https://github.com/AlexanderPeter/cicd auf der AWS-Umgebung ist hier aufgeführt. 
 + 
 +<code bash> 
 +pipeline { 
 +    agent any 
 + 
 +    environment { 
 +        PROJECT_NAME       = "cicd" 
 +        BRANCH_NAME        = "develop" 
 +        REPO_URL           = "https://github.com/AlexanderPeter/${PROJECT_NAME}.git" 
 +        TARGET_DIR         = "/var/jenkins_home/projects/${PROJECT_NAME}/${BRANCH_NAME}" 
 +        SONAR_SCANNER_OPTS = "-Xmx512m" 
 +        BACKEND_CONTAINER  = "${PROJECT_NAME}_${BRANCH_NAME}_backend" 
 +        DB_CONTAINER       = "${PROJECT_NAME}_${BRANCH_NAME}_db" 
 +        DB_VOLUME          = "${PROJECT_NAME}_${BRANCH_NAME}_db_data" 
 +        DB_USER            = "appuser" 
 +        DB_PASSWORD        = "apppassword" 
 +        DB_NAME            = "appdb" 
 +    } 
 + 
 +    stages { 
 +        stage('Checkout') { 
 +            steps { 
 +                git branch: BRANCH_NAME, 
 +                    url: REPO_URL 
 +            } 
 +        } 
 +         
 +        stage('Start Database') { 
 +            when { 
 +                expression { false } 
 +            } 
 +            steps { 
 +                sh ''' 
 +                    echo "Starting DB with workspace $WORKSPACE" 
 +                     
 +                    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:/var/lib/postgresql/data \ 
 +                      -v $WORKSPACE/database:/docker-entrypoint-initdb.d \ 
 +                      postgres:17 
 +                ''' 
 +            } 
 +        } 
 +         
 +        stage('Initialize Database') { 
 +            when { 
 +                expression { false } 
 +            } 
 +            steps { 
 +                sh ''' 
 +                    TABLE_EXISTS=$(docker exec $DB_CONTAINER psql -U $DB_USER -d $DB_NAME -tAc "SELECT to_regclass('public.poll')"
 +                    if [ "$TABLE_EXISTS" = "" ]; then 
 +                        echo "Initializing schema..." 
 +                        docker exec -i $DB_CONTAINER psql -U $DB_USER -d $DB_NAME < database/schema.sql 
 +                    else 
 +                        echo "Database already initialized." 
 +                    fi 
 +                ''' 
 +            } 
 +        } 
 +  
 + stage('Build Frontend') { 
 +            when { 
 +                expression { false } 
 +            } 
 +            steps { 
 +                dir('frontend') { 
 +                    sh ''' 
 +                 npm install 
 +         GENERATE_SOURCEMAP=false \ 
 +                NODE_OPTIONS="--max-old-space-size=1024"
 +                PUBLIC_URL=/projects/${PROJECT_NAME}/${BRANCH_NAME} \ 
 +                REACT_APP_API_BASE=/api/${PROJECT_NAME}/${BRANCH_NAME}/api \ 
 +                npm run build 
 +                    ''' 
 +                } 
 +            } 
 +        } 
 +  
 +        stage('Deploy Frontend') { 
 +            when { 
 +                expression { false } 
 +            } 
 +            steps { 
 +                sh ''' 
 +                    echo "Deploying frontend to $TARGET_DIR" 
 + 
 +                    mkdir -p "$TARGET_DIR" 
 +                    rm -rf "$TARGET_DIR"/
 + 
 +                    cp -r frontend/build/* "$TARGET_DIR"/ 
 +                ''' 
 +            } 
 +        } 
 +         
 +        stage('Deploy Backend') { 
 +            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="postgresql://$DB_USER:$DB_PASSWORD@$DB_CONTAINER:5432/$DB_NAME"
 +                        $BACKEND_CONTAINER 
 +                ''' 
 +            } 
 +        } 
 +    } 
 +
 + 
 +</code> 
  • de/modul/ffit/3-jahr/cicd/learningunits/lu09/b.1775505445.txt.gz
  • Zuletzt geändert: 2026/04/06 21:57
  • von apeter