jenkins pipeline

Jenkins-Multijob

Die Jenkins-Meldung

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

Im Simulationsschritt laufen die Programme parallel und tauschen über die openfoam-Schnittstelle „externalCoupled“ Daten aus. D.h. zu bestimmten Zeitpunkten erhält der Strömungslöser Temperaturen vom Heatsolver und der Heatsolver Wärmestromdichten von openfoam. Die Steuerdatein der Programme enthalten dabei die Einzelheiten zur jeweiligen Simualtion und zur Kopplung.

Testproblem zur gekoppelte Simulation openfoam & externer Heatsolver: Box mit Heizplatte
Testproblem: Box mit Heizplatte

Pipeline

Jenkins-Pipeline-Jobs werden über ein script definiert, das sogenannte Jenkinsfile (siehe auch: How “Groovy” is a Jenkinsfile?).

Die Jenkins-Pipeline für die gekoppelte Simulation kann wie folgt beschrieben werden

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

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