0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Using Environment Variables in Jenkinsfile

Posted at

Using Environment Variables in Jenkinsfile

Environment variables in Jenkinsfiles help manage configurations dynamically across pipelines. Below are different ways to define and use them, along with key differences:


1. Environment Variable Block (Global Scope)

Defined at the pipeline top level, these variables are available across all stages.

Example:

pipeline {
    agent any
    
    environment {
        GLOBAL_VAR = "value"          // Static value
        BUILD_NUM = "${env.BUILD_ID}" // Jenkins built-in variable
        CREDS = credentials('aws-key') // Secret credential (masked)
    }
    
    stages {
        stage('Example') {
            steps {
                echo "Global var: ${env.GLOBAL_VAR}"
                echo "Build ID: ${env.BUILD_NUM}"
            }
        }
    }
}

Key Points:

✅ Available in all stages.
✅ Supports credentials masking (e.g., credentials()).
❌ Cannot be modified after declaration (immutable in environment block).


2. Environment Variable per Stage (Stage-Specific)

Variables defined inside a stage are only available in that stage.

Example:

pipeline {
    agent any
    
    stages {
        stage('Stage 1') {
            environment {
                STAGE_VAR = "stage1_value"
            }
            steps {
                echo "Stage var: ${env.STAGE_VAR}"
            }
        }
        
        stage('Stage 2') {
            steps {
                // This will FAIL! STAGE_VAR is not accessible here.
                echo "Trying to access: ${env.STAGE_VAR}"
            }
        }
    }
}

Key Points:

✅ Useful for stage-specific configs (e.g., test env vs. prod env).
Not shared across stages.


3. Reusing a Variable Across Stages

To pass a variable from one stage to another, you must:

  • Use script { } block + env.VAR_NAME (for Jenkins environment variables).
  • Or use def (temporary variable) but it won’t persist across stages.

Example:

pipeline {
    agent any
    
    stages {
        stage('Stage A') {
            steps {
                script {
                    env.SHARED_VAR = "data"  // Available in all future stages
                    def tempVar = "temp"     // Only available in this script block
                }
            }
        }
        
        stage('Stage B') {
            steps {
                echo "Shared var: ${env.SHARED_VAR}"  // Works!
                echo "Temp var: ${tempVar}"          // Fails (not defined)
            }
        }
    }
}

Key Points:

env.VAR_NAME persists globally.
def variables are local to the script block.


4. def vs environment Block Variables

Feature environment { VAR = ... } env.VAR = ... (script) def var = ...
Scope Global (all stages) Global (if using env.) Local (script block only)
Modifiable ❌ No (immutable) ✅ Yes ✅ Yes
Credentials ✅ Supports credentials() ✅ Yes ❌ No
Built-in Jenkins vars ${env.BUILD_ID} ${env.BUILD_ID} ❌ No

When to Use Which?

  • environment { } → Best for secrets & global constants.
  • env.VAR = ... → Best for dynamic values shared across stages.
  • def → Best for temporary calculations (not reusable later).

Summary Cheat Sheet

Use Case Recommended Approach
Global config (all stages) environment { } block
Stage-specific config environment { } inside stage
Dynamic vars across stages script { env.VAR = ... }
Temporary variables (math, loops) def var = ...
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?