LU12b - Variablen im Jenkinsfile

Die Verwendung von Variablen in Jenkinsfile ist manchmal nicht intuitiv, weil zwei unterschiedliche Interpreter im Spiel sind

  1. Groovy/Jenkins: Interpretiert Env-Variablen und echte Groovy-Variablen
  2. Shell/Bash: Interpretiert Env-Variablen und echte Shell-Variablen

Dabei spielen die gewählten Anführungszeichen eine entscheidende Rolle

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