====== 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 |