如何将 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 命令(例如 cat
或 type
,具体取决于您的 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)
}
我在管道中有一些流程,如下所示。
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 命令(例如 cat
或 type
,具体取决于您的 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)
}