pipeline中 stage 代码段定义的parameters 参数作用范围

在Jenkins Pipeline中,parameters 定义在 pipeline 或 stage 中的行为取决于你如何定义它们。

  1. 如果你在 pipeline 的顶层定义 parameters,那么这些参数将被视为全局参数,它们在整个 Pipeline 中都是可访问的,并且可以在所有 stage 中使用。
pipeline {
    parameters {
        string(name: 'GLOB_VAR', defaultValue: 'default', description: 'This is a global variable')
    }
    stages {
        stage('Example') {
            steps {
                echo "Global variable value: ${params.GLOB_VAR}"
            }
        }
    }
}
预览

在上面的例子中,GLOB_VAR 是一个全局参数,可以在 Pipeline 的任何地方通过 params.GLOB_VAR 访问。

  1. 如果你在 stage 内部定义 parameters,那么这些参数将仅在该 stage 内部可用。
pipeline {
    stages {
        stage('Example') {
            parameters {
                string(name: 'STAGE_VAR', defaultValue: 'default', description: 'This is a stage-specific variable')
            }
            steps {
                echo "Stage variable value: ${params.STAGE_VAR}"
            }
        }
        stage('Another Stage') {
            // 这里无法访问 params.STAGE_VAR
            steps {
                echo "Trying to access stage variable: ${params.STAGE_VAR}"
            }
        }
    }
}
预览

然而,请注意,在Jenkins Pipeline (Declarative) 的当前实现中,stage 级别的 parameters 定义实际上并不会产生预期的效果;它们不会使参数成为该 stage 专有的。即使在 stage 级别定义了参数,它们仍然会被视为全局参数,可以在整个 Pipeline 中访问。

为了在特定 stage 中使用局部变量,通常的做法是使用 script 块和局部变量,而不是 parameters:

pipeline {
    stages {
        stage('Example') {
            steps {
                script {
                    def stageVar = 'local value'
                    echo "Stage variable value: ${stageVar}"
                }
            }
        }
        stage('Another Stage') {
            // 这里无法访问上面定义的 stageVar
            steps {
                echo "This stage doesn't have access to the previous stage's local variable."
            }
        }
    }
}
预览

在这个例子中,stageVar 是一个局部变量,只能在 Example stage 的 script 块内部访问。

请先 登录 后评论
  • 0 关注
  • 0 收藏,83 浏览
  • shitian 提出于 2024-11-01 12:26

相似问题