如何将 Python 变量传递给管道中的下游作业

How to pass Python variable to the downstream job in pipeline

我在管道中有一些流程,如下所示。

    stage('Build') {
                    build job: 'Build'
    }

    stage('Run') {
                  build job: 'Run', parameters: [string(name: 'build_version', value: <to get from Build job>)]
    }

我是 运行 构建作业中的一个 python 脚本作为执行批处理脚本。

```python build.py```

"build.py" 将有一个变量 "build_version"。我想将它传递给 jenkins Job "Build" 并转入管道并将其传递给管道中的 "Run" 作业。

我该怎么做?

这是一种可能的解决方案..

def build_version = bat(script: '/path/to/python /path/to/build.py', returnStdout: true)

并且 python 脚本应该将要分配给 $build_version

的值写入 STDOUT

请注意,每个 shell(管道中的 sh 步骤)都会打开一个新的 shell,而不会从上一个步骤中得知。如果你想让你的 shell 变量可见,你需要 export 变量。

作为这里的通知,在这些情况下我通常做的不是导出变量(你需要从 python 中的环境中获取它),而是 "create" [=23] =] 包含所有需要的变量的文件。稍后,您的 build.py 脚本会导入它。

要将环境变量注入该环境 python 文件,您可以使用 shell 命令(例如 cattype,具体取决于您的 OS ) 或使用 groovy 函数(参见 writeFile

不确定这是有效的解决方案。但是下面的方法对我有用。

我正在从 python 脚本创建一个 属性 文件,其中包含下一步所需的值。 并使用 EnvInject 插件将其推送到构建的环境变量,然后在管道中使用方法 "rawBuild.getEnvironment()" 我得到了它。 示例代码:

    def param_val = ""
    stage("Build"){
        def build_var = build job: 'Build'
        param_val = build_var.rawBuild.getEnvironment()[<Variable name you defined>]
     }
    stage("Run") {
         build job: 'Run', parameters: [string(name: '<param>', value: param_val)
    }