Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:ffit:3-jahr:cicd:learningunits:lu11:b [2026/05/12 00:53] – angelegt apeterde:modul:ffit:3-jahr:cicd:learningunits:lu11:b [2026/05/12 02:10] (aktuell) apeter
Zeile 1: Zeile 1:
-====== LU11b - Multibranch-Pipeline ======+====== LU11b - Lokales Jenkinsfile mit Bedingungen ======
  
-==== Jenkins-Multibranch-Pipeline ====+Bei der bisherigen Pipeline haben wir der Einfachheit halber das Pipeline-Script direkt auf dem Jenkins-Server hinterlegt. Das ist zwar schneller, um "herumzuspielen", aber langfristig ist es sauberer, die Konfiguration in das Repository einzuchecken. Dasselbe gilt auch für andere Konfigurationsdateien wie sonar-project.properties. 
 + 
 +Gewisse Variablen wie "BRANCH_NAME" stehen automatisch zur Verfügung und müssen nicht mehr definiert werden. Es ist jedoch Vorsicht geboten, wenn Branchnamen Zeichen enthalten, die zum Beispiel für Containernamen nicht gültig sind.  
 + 
 +Bei SonarQube kann die kostenlose Community-Edition keine Multibranch-Analyse erstellen, dafür wäre die Developer-Edition nötig. Für unseren Fall reicht es jedoch aus, wenn nur der Entwicklungs-Branch analysiert wird. Damit die anderen Branches nicht aus Versehen dazwischenfunken, kann die "When"-Expression verwendet werden.  
 + 
 +<code groovy> 
 +            when { 
 +                branch 'develop' 
 +            } 
 +</code> 
 + 
 +Diese kann auch verwendet werden, um die Branches einzuschränken, welche deployed werden sollen. 
 +<code groovy> 
 +            when { 
 +                anyOf { 
 +                    branch 'master' 
 +                    branch 'develop' 
 +                } 
 +            } 
 +</code> 
 + 
 +Ein Jenkinsfile (ohne Backend) könnte folgendermassen aussehen: 
 + 
 +<code groovy>pipeline { 
 +    agent any 
 + 
 +    options { 
 +        disableConcurrentBuilds() 
 +        timeout(time: 10, unit: 'MINUTES'
 +    } 
 + 
 +    environment { 
 +        PROJECT_NAME       "..." 
 +        TARGET_DIR         "/var/jenkins_home/projects/${PROJECT_NAME}/${BRANCH_NAME}" 
 +        SONAR_SCANNER_OPTS "-Xmx512m" 
 +    } 
 + 
 +    stages { 
 +        stage('Checkout') { 
 +            steps { 
 +                checkout scm 
 +            } 
 +        } 
 + 
 +        stage('Build Frontend') { 
 +            steps { 
 +                dir('frontend') { 
 +                    sh ''' 
 +             npm ci ... 
 +                npm run build 
 +                    ''' 
 +                } 
 +            } 
 +        } 
 + 
 +        stage('SonarQube Analysis') { 
 +            when { 
 +                branch 'develop' 
 +            } 
 +            steps { 
 +                sh """ 
 +                    echo "Starting SonarQube analysis of $PROJECT_NAME" 
 +                    echo "SONAR_SCANNER_OPTS=$SONAR_SCANNER_OPTS" 
 +                    echo "NODE_OPTIONS=$NODE_OPTIONS" 
 +                """ 
 +                script { 
 +                    def scannerHome = tool 'sonar-scanner' 
 +                    withSonarQubeEnv('SonarQube') { 
 +                        sh """ 
 +                        ${scannerHome}/bin/sonar-scanner \ 
 +                          -Dsonar.projectKey=${PROJECT_NAME} \ 
 +                          -Dsonar.branch.name=${BRANCH_NAME} 
 +                        """ 
 +                    } 
 +                } 
 +            } 
 +        } 
 +  
 +        stage('Deploy Frontend') { 
 +            when { 
 +                anyOf { 
 +                    branch 'master' 
 +                    branch 'develop' 
 +                } 
 +            } 
 +            steps { 
 +                sh ''' 
 +                    echo "Deploying frontend to $TARGET_DIR" 
 + 
 +                    mkdir -p "$TARGET_DIR" 
 +                    rm -rf "$TARGET_DIR"/
 + 
 +                    cp -r frontend/build/* "$TARGET_DIR"/ 
 +                ''' 
 +            } 
 +        } 
 +    } 
 + 
 +    post { 
 +        always { 
 +            deleteDir() 
 +        } 
 +    } 
 +
 + 
 +</code> 
 +Sie finden dieses Beispiel auch in folgendem Repository: https://github.com/AlexanderPeter/cicd/blob/develop/Jenkinsfile
  
  • de/modul/ffit/3-jahr/cicd/learningunits/lu11/b.1778540011.txt.gz
  • Zuletzt geändert: 2026/05/12 00:53
  • von apeter