解决:获取 python script 输出结果,赋值为 pipeline 的变量,在不同的 stage 中使用。
在 Jenkins Job 中,添加一个 pre script 来提高自动化程度,将这个脚本的输出作为其他主要流程build的参数,因此,build 参数的逻辑由 pre script 来控制,而不改变main job的逻辑。
下面的 sample 是通过获取一个 python 脚本的 console output 到 pipeline,然后再传递给其他 step 使用。
方法和 sample
python script 中 print 或 sys.stdout.write 的输出,Jenkins 都可以获取到。只需要在pipeline script 中使用下面的方法,会获取到 script 的所有 output.
script {
value = sh(script: 'python xxx.py', returnStdout: true)
// 使用 trim() 可以去掉打印的 \n
// value = sh(script: 'python xxx.py', returnStdout: true).trim()
}
python script
func test_value 是为了说明 return value 但并不输出到console,脚本执行结束后 Jenkins 并获取不到。下面的脚本,Jenkins 获取到的是 “Value: 2 3”。为了 pipeline 处理方便,可以在脚本中控制输出。
# use_python_value.py
import sys
def test_value():
return 2
if __name__ == '__main__':
print('Value: %s %s' % (2, 3))
# sys.stdout.write('Value stdout: %s\n' % 2)
# test_value()
pipeline script
sample pipeline 中设置了三个stage,Preparation中定义一个变量,Get number 执行python 脚本,获取输出,Result 中使用该变量。
pipeline {
agent any
stages {
stage('Preparation') {
steps {
echo 'Declaration for a variable'
script {
// value: global variable
value = '0'
// def value: local variable
// def value = '0'
}}
}
stage('Get number') {
steps {
echo "Before get number value is $value"
script {
value = sh(script: 'python /Users/<username>/WorkSpace/learn-Jenkins/pipeline/use_python_value.py', returnStdout: true)
}
}
}
stage('Results') {
steps {
echo "Now value is $value"
}
}
}
}
网友评论