如何在声明性管道中的阶段之间共享变量

问题描述 投票:0回答:1

我有以下管道(内容简化,但结构准确):

pipeline {
    agent any
    environment {
                    my_var = ""
                }
    stages {
        stage('Stage_parallel'){
            parallel{
                stage('Stage_1') {
                    steps {
                        ...
                    }
                }
                stage('Stage_2'){
                    steps {
                        withCredentials([usernamePassword(<LOGIN>, <PASS>)])
                        {
                            sh'''
                                  ...
                                  var_1 = "/path/to/folder"
                                  var_2 = "file_name"
                                  my_var = "${var_1}/${var_2}"
                                  echo ${my_var} ### returns correct value
                            '''
                        }}}}}
        stage('Stage_3'){
            steps {
                sh 'echo ${my_var}' ### returns ""
            }}}}

所以我尝试声明全局变量,在

Stage_2
中更新它并在
Stage_3
中使用。但是,它仅在
Stage_2
sh
块中返回正确的值,而不是在外部......我也尝试过

  • pipeline
    块之外定义变量,如
    def my_var
  • Stage_2
    中将其定义为
    env.my_var = "${var_1}/${var_2}"
    并在
    Stage_3
    中使用为
    ${env.my_var}

但是没有一种方法允许从

my_var
获取
Stage_2
值...那么我应该如何修复管道?

jenkins pipeline jenkins-declarative-pipeline
1个回答
0
投票
从概念上讲,Jenkins“按值”而不是“按引用”将环境变量传递给脚本。如果您想保留

sh

 步骤之间的任何状态(在同一阶段或不同阶段内无关紧要),您有两种选择:

    将状态信息传递回 Jenkins(序列化到标准输出并在 Jenkins 中捕获它),但你牺牲了声明的纯度
  1. 将其保存在工作区中的某个文件中,一般来说这不是一个好主意,但在非常简单的情况下可以接受
选择你的毒药。

© www.soinside.com 2019 - 2024. All rights reserved.