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

时间:2019-05-21 13:12:14

标签: python jenkins jenkins-pipeline jenkins-plugins jenkins-groovy

我在管道中有类似下面的流程。

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

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

我正在Build作业中运行python脚本作为执行批处理脚本。

```python build.py```

“ build.py”将具有变量“ build_version”。我想将其传递给jenkins Job“ Build”,然后转到管道,然后将其从管道传递给“ Run”作业。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

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

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

并且python脚本应将要分配给$ build_version的值写入STDOUT

答案 1 :(得分:0)

请注意,每个外壳程序(管道中的sh步骤)都会打开一个新的外壳程序,而前一个外壳程序是未知的。如果要使Shell变量可见,则需要export变量。

请注意,在这些情况下,我通常不导出变量(您需要从python中的env获取它),而是“创建”一个包含所有所需变量的python文件。稍后,您的build.py脚本只需导入即可。

要将环境变量注入该环境python文件,您可以使用shell命令(例如cattype,具体取决于您的操作系统)或使用groovy函数(请参见writeFile)< / p>

答案 2 :(得分:0)

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

从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)
    }