【发布时间】:2019-10-24 08:37:09
【问题描述】:
这个 python eval 的输出看起来可能是 jenkins 管道中的阶段
$ python3 -c 'print("\n".join(["stage({val}) {{ do something with {val} }}".format(val=i) for i in range(3)]))'
stage(0) { do something with 0 }
stage(1) { do something with 1 }
stage(2) { do something with 2 }
jenkins 是否可以使用这样的输出来创建管道中的步骤或阶段,以便正在运行的 python 脚本能够更新 jenkins?这样做的目的是让 Blue Ocean 管道有一个阶段点,该阶段点由运行单独作业的外部脚本制作。
详细说明这个例子......如果这个demo.py脚本在一个阶段输出正常运行时间
#!/bin/env python3.6
import subprocess, time
def uptime():
return (subprocess.run('uptime', stdout=subprocess.PIPE, encoding='utf8')).stdout.strip()
for i in range(3):
print("stage({val}) {{\n echo \"{output}\" \n}}".format(val=i, output=uptime()))
time.sleep(1)
在 jenkins 管道中的设置位置
node {
stage("start demo"){
sh "/tmp/demo.py"
}
}
因为这个演示只是输出文本,并没有在蓝海中创建任何阶段
[Pipeline] sh
+ /tmp/demo.py
stage(0) {
echo "03:17:16 up 182 days, 12:17, 8 users, load average: 0.00, 0.03, 0.05"
}
stage(1) {
echo "03:17:17 up 182 days, 12:17, 8 users, load average: 0.00, 0.03, 0.05"
}
stage(2) {
echo "03:17:18 up 182 days, 12:17, 8 users, load average: 0.00, 0.03, 0.05"
}
再次强调,让 Blue Ocean 管道有一个带有日志的阶段点
【问题讨论】: