====== LU12b - Variablen im Jenkinsfile ====== Die Verwendung von Variablen in Jenkinsfile ist manchmal nicht intuitiv, weil zwei unterschiedliche Interpreter im Spiel sind - **Groovy/Jenkins**: Interpretiert Env-Variablen und echte Groovy-Variablen - **Shell/Bash**: Interpretiert Env-Variablen und echte Shell-Variablen Dabei spielen die gewählten Anführungszeichen eine entscheidende Rolle * Variablen innerhalb von Double-Quotations werden durch Groovy interpretiert. * Variablen innerhalb von Single-Quotations werden nicht durch Groovy interpretiert, sondern erst durch die Shell. Grundsätzlich können überall Double-Quotations genutzt werden, sofern Shell-Variablen escaped werden. Folgende Tabelle gibt eine Übersicht. ^ Variablen-Art ^ Schreibweise ^ Kommentar ^ | Jenkins/env var | sh """ PUBLIC_URL=/projects/${PROJECT_NAME}/${BRANCH_NAME} \ """ sh """ -e POSTGRES_USER=$DB_USER """ | ✅ Durch Groovy interpretiert | | Echte Groovy-Variable | sh """ ${scannerHome}/bin/sonar-scanner \ """ sh """ $scannerHome/bin/sonar-scanner \ """ | ✅ Durch Groovy interpretiert | | Echte Shell-Variable | sh """ if [ "\${TABLE_EXISTS}" = "" ]; then """ sh """ if [ "\$TABLE_EXISTS" = "" ]; then """ | ⚠️ Dollar muss escaped werden, damit Shell anstatt Groovy interpretiert | | Jenkins/env var | sh ''' PUBLIC_URL=/projects/${PROJECT_NAME}/${BRANCH_NAME} \ ''' sh ''' -e POSTGRES_USER=$DB_USER ''' | ✅ Durch Shell interpretiert | | Echte Groovy-Variable | sh ''' ${scannerHome}/bin/sonar-scanner \ ''' sh ''' $scannerHome/bin/sonar-scanner \ ''' | ❌ Funktioniert nicht | | Echte Shell-Variable | sh ''' if [ "${TABLE_EXISTS}" = "" ]; then ''' sh ''' if [ "$TABLE_EXISTS" = "" ]; then ''' | ✅ Durch Shell interpretiert |