I have several use cases where I may operate on a list or map on different stages of a pipeline. This variable may not be known ahead of time - it could be defined within a stage. I'd like a syntax that allows me to define variables within a pipeline.
Today, I have to define a shared variable before entering pipeline {}.
Jenkinsfile
#!/bin/groovy
// Define outside of pipeline to make sure accessible in all script {} blocks
def my_list
pipeline {
agent { label 'label' }
stages {
stage('stage1') {
steps {
script {
my_list = [1,2,3]
}
}
}
stage('stage2') {
steps {
script {
for(int i=0; i<my_list.size();i++) {
echo "Doing something with ${my_list[i]}"
}
}
}
}
}
}
A simple approach would be to allow "def" to work anywhere within pipeline {}. This avoids any overly new syntax for pipeline.
Another option would allow the user to provide a special pipeline {} block for defining non-env/params style variables. This could be helpful in allowing the user to use items available in script {} for defining shared state.
Jenkinsfile with possible example syntax
#!/bin/groovy
pipeline {
agent { label 'label' }
define {
def my_map = [:] <span class="code-comment">//empty map
def my_list //undefined shared variable
}
stage('stage1') {
steps {
script {
//If def can be anywhere in pipeline {}, drop script {}
my_list = [1,2,3]
}
}
}
stage('stage2') {
steps {
script {
for(int i=0; i<my_list.size();i++) {
echo "Doing something with ${my_list[i]}"
}
}
}
}
}
}
Originally reported by rpocase, imported from: Allow variables and functions to be defined within pipeline to be used in any stage
- assignee:
abayer
- status: Closed
- priority: Critical
- component(s): pipeline-model-definition-plugin
- resolution: Won't Fix
- resolved: 2018-04-12T15:59:31+00:00
- votes: 43
- watchers: 57
- imported: 2025-12-06
Raw content of original issue
I have several use cases where I may operate on a list or map on different stages of a pipeline. This variable may not be known ahead of time - it could be defined within a stage. I'd like a syntax that allows me to define variables within a pipeline.
Today, I have to define a shared variable before entering pipeline {}.
Jenkinsfile
#!/bin/groovy
// Define outside of pipeline to make sure accessible in all script {} blocks
def my_list
pipeline {
agent { label 'label' }
stages {
stage('stage1') {
steps {
script {
my_list = [1,2,3]
}
}
}
stage('stage2') {
steps {
script {
for(int i=0; i<my_list.size();i++) {
echo "Doing something with ${my_list[i]}"
}
}
}
}
}
}
A simple approach would be to allow "def" to work anywhere within pipeline {}. This avoids any overly new syntax for pipeline.
Another option would allow the user to provide a special pipeline {} block for defining non-env/params style variables. This could be helpful in allowing the user to use items available in script {} for defining shared state.
Jenkinsfile with possible example syntax
#!/bin/groovy
pipeline {
agent { label 'label' }
define {
def my_map = [:] <span class="code-comment">//empty map
def my_list //undefined shared variable
}
stages {
stage(<span class="code-quote">'stage1'</span>) {
steps {
script {
<span class="code-comment">//If def can be anywhere in pipeline {}, drop script {}
my_list = [1,2,3]
}
}
}
stage(<span class="code-quote">'stage2'</span>) {
steps {
script {
<span class="code-keyword">for</span>(<span class="code-object">int</span> i=0; i<my_list.size();i++) {
echo <span class="code-quote">"Doing something with ${my_list[i]}"</span>
}
}
}
}
}
}
I have several use cases where I may operate on a list or map on different stages of a pipeline. This variable may not be known ahead of time - it could be defined within a stage. I'd like a syntax that allows me to define variables within a pipeline.
Today, I have to define a shared variable before entering pipeline {}.
A simple approach would be to allow "def" to work anywhere within pipeline {}. This avoids any overly new syntax for pipeline.
Another option would allow the user to provide a special pipeline {} block for defining non-env/params style variables. This could be helpful in allowing the user to use items available in script {} for defining shared state.
Originally reported by rpocase, imported from: Allow variables and functions to be defined within pipeline to be used in any stage
Raw content of original issue