How do you handle global variables in a declarative pipeline?

For strings, add it to the 'environment' block:

pipeline {
  environment {
    myGlobalValue = 'foo'
  }
}

But for non-string variables, the easiest solution I've found for declarative pipelines is to wrap the values in a method.

Example:

pipeline {
  // Now I can reference myGlobalValue() in my pipeline.
  ...
}

def myGlobalValue() {
    return ['A', 'list', 'of', 'values']

// I can also reference myGlobalValue() in other methods below
def myGlobalSet() {
    return myGlobalValue().toSet()
}

Like @mkobit says, you can define the variable to global level out of pipeline block. Have you tried that?

def my_var
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                my_var = 'value1'
            }
        }

        stage('Example2') {
            steps {
                printl(my_var)
            }
        }

    }
}

This is working without an error,

def my_var
pipeline {
    agent any
    environment {
        REVISION = ""
    }
    stages {
        stage('Example') {
            steps {
                script{
                    my_var = 'value1'
                }
            }
        }

        stage('Example2') {
            steps {
                script{
                    echo "$my_var" 
                }
            }
        }
    }
}