Jenkins Pipeline

Jenkins ist eine weitverbreitete Open-Source-Automatisierungsplattform, die eng mit Git für Continuous Integration zusammenarbeitet. Durch automatisierte Builds und Tests ermöglicht Jenkins die frühzeitige Identifizierung potenzieller Probleme.
Das Jenkins-Plugin ‘Multijob’ ermöglicht die Bündelung mehrerer Jenkins-Jobs zu einer Gruppe. Aufgrund der Markierung dieses Plugins als veraltet erfolgt die Umstellung auf Jenkins-Pipeline.

Jenkins-Multijob

Mehrere Tests sind als Jenkins-Multijob implementiert. Die Jenkins-Meldung

jenkins message

gab Anlass zur Umstellung eines Multijobs auf Jenkins Pipeline. Der Multijob führte eine gekoppelte Rechnung mit OpenFOAM und einem externen Strahlungs- und Wärmeleitungslöser aus. Er besteht aus den Schritten

  1. Init-Phase
    • erstelle einen gemeinsamen Workspace für die beiden Simulationsprogramme
    • Meshing der OpenFOAM-Geometrie
  2. gekoppelte Simualtion
    • run OpenFOAM
    • run extern Heatsolver

Für jeden dieser Schritte gibt es einen Jenkins-Job.

jenkins-Multijob für eine gekoppelte OpenFOAM-Simualtion
Jenkins-Multijob für eine gekoppelte OpenFOAM-Simulation

Während eines Simulationsschritts arbeiten die Programme parallel und kommunizieren über die OpenFOAM-Schnittstelle “externalCoupled”. Das bedeutet, dass zu bestimmten Zeitpunkten der Strömungslöser Temperaturen vom Heatsolver erhält und der Heatsolver Wärmestromdichten von OpenFOAM empfängt. Die Details zur Durchführung der Simulation und zur Kopplung sind in den Steuerdateien der Programme festgelegt.

Testproblem zur gekoppelte Simulation OpenFOAM & externer Heatsolver: Box mit Heizplatte
Testproblem: Box mit Heizplatte
Pipeline

Jenkins-Pipeline-Jobs werden über ein Skript definiert, das sogenannte Jenkinsfile. Dieses enthält die Pipeline-Konfiguration und -Schritte für Jenkins.

pipeline {
    agent { // run on workstation kepler 
           label 'kepler'
          }

    stages {
        stage('WorkSpace') {
            steps {
                echo "Build Workspace: $WORKSPACE"
                build quietPeriod: 0, job: 'Workspace-Box'
            }
        }
    
        stage('Meshing') {
            steps {
                echo "OF-Mesh"
                build quietPeriod: 0, job: 'OF-Meshing'
            }
        }
        
        stage('CoupledSimulation') {
            parallel {
                stage('Run-HeatSolver') {                    
                    steps {
                        build quietPeriod: 0, job: 'RunExternalHeatSolver'
                    }                    
                }               
                stage('Run-Openfoam') {                    
                    steps {
                       build quietPeriod: 120, job: 'RunOpenFoam'
                    }                    
                }
            }                
        }
    }    
}


In diesem Jenkinsfile wird die Pipeline für die gekoppelte Simulation definiert. Der wichtig Teil ist die parallel-Umgebung, die die beiden Jenkins-jobs RunExternalHeatSolver und RunOpenFoam gleichzeitig ausführt (OpenFOAM wird mit einer Verzögerung von 2 Minuten gestartet, was in etwa der Rechenzeit der Init-Phase des Heatsolver entspricht).

Links