【问题标题】:How to pass Python variable to the downstream job in pipeline如何将 Python 变量传递给管道中的下游作业
【发布时间】:2019-05-21 13:12:13
【问题描述】:

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

    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 作业“构建”并转入管道,并将其传递给管道中的“运行”作业。

我该怎么做?

【问题讨论】:

  • 我尝试使用子进程调用“setx 命令”将该值设置为环境变量。但是我无法从詹金斯那里找到那个环境变量。

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


【解决方案1】:

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

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

python 脚本应该将你想要分配给 $build_version 的值写入 STDOUT

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      我正在从 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)
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-05
        相关资源
        最近更新 更多