从jenkins中的sh文件设置环境,并在构建的其余部分保留它

从jenkins中的sh文件设置环境,并在构建的其余部分保留它,jenkins,Jenkins,在我的管道中,我想要源文件,设置环境变量,如/file.sh并为管道的其余部分设置它们。 我认为这并没有得到实施,因为这是一个已经存在多年的问题 目前,我在做以下测试: stage("Stage") { steps { sh ". ./file.sh && env" sh "env" } } 2个环境输出不同的值。我希望詹金斯每次都能创建一个新的shell。是否有不调用新shell的选项 据我所知,我看到了3种可能性: 在一个sh

在我的管道中,我想要源文件,设置环境变量,如
/file.sh
并为管道的其余部分设置它们。 我认为这并没有得到实施,因为这是一个已经存在多年的问题

目前,我在做以下测试:

stage("Stage") {
    steps {
        sh ". ./file.sh && env"
        sh "env"
    }
}
2个环境输出不同的值。我希望詹金斯每次都能创建一个新的shell。是否有不调用新shell的选项

据我所知,我看到了3种可能性:

  • 在一个
    sh
    语句中执行所有我的命令,或将执行过程包装在脚本中。问题是这使得调试相当困难
  • 在每个sh命令处对文件进行源代码设置
  • 创建一个封装调用的自定义groovy函数

  • 最后两个解决方案听起来很糟糕,欢迎提出任何建议。

    看起来我们可以按照
    环境
    指令功能处理全局变量和阶段特定变量

    因此,在您的实例中,如果您在全局范围内定义
    file.sh
    中的所有变量,那么打印将给出所需的结果

    管道{
    任何代理人
    环境{
    myGlobVar='2020'
    }
    舞台{
    阶段('示例'){
    环境{
    mystspecificvar=2020.2
    }
    台阶{
    sh‘printenv’
    }
    }
    }
    
    }

    这不是我想做的。我使用的脚本来自一个库,它做了很多事情并设置了变量。您的建议只涉及环境指令设置一个变量,因为没有像“预构建”阶段选项那样构建的功能,我认为它是通过职责分离实现的——在shell脚本中,您可以使用脚本管道语法或
    sh
    执行一些特定于脚本的逻辑。并在全局部分定义所有变量(Jenkins作业所需的变量)(多个变量在单独的行中)。或者在您的脚本业务逻辑中,您需要
    源文件
    该概要文件-通过将
    名称=值
    对分离到一个新文件