我正在尝试从Jenkins CI(1.509.4)调用一个使用subprocess.Popen()的python脚本,但是如果失败并出现错误。如果我使用命令提示符(Windows 7)调用该脚本,那么脚本工作正常。 这是一个代码示例:
import os
import subprocess
params = 'svn status --no-ignore E:\\jenkins_tmp\\abc'
cwd = os.path.dirname(__file__)
print 'cwd: ' + cwd
proc = subprocess.Popen(params, cwd=cwd, stdout=subprocess.PIPE)
for line in iter(proc.stdout.readline, ''):
print line,
proc.wait()
Jenksins控制台输出错误:
Started by user anonymous
Building in workspace D:\Jenkins\jobs\zzz_svn_delete_unversioned_files\workspace
[workspace] $ cmd /c call C:\Windows\TEMP\hudson9055590820378012726.bat
cwd: E:\jenkins_tmp\my_utils
Traceback (most recent call last):
File "E:\jenkins_tmp\my_utils\temp2.py", line 8, in <module>
proc = subprocess.Popen(params, cwd=cwd, stdout=subprocess.PIPE)
File "C:\Program Files (x86)\Python27\lib\subprocess.py", line 679, in __init__
errread, errwrite)
File "C:\Program Files (x86)\Python27\lib\subprocess.py", line 893, in _execute_child
startupinfo)
WindowsError: [Error 2]
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE
有谁知道为什么这个脚本从Jenkins和命令提示符启动了不同的行为?
解决方案:令人惊讶的是,它需要使用SVN的完整路径,因此在初始代码中我更改了下一行:
params = 'C:\\Program Files\\TortoiseSVN\\bin\\svn.exe status --no-ignore E:\\jenkins_tmp\\abc'
答案 0 :(得分:0)
当您自己运行脚本时,您将使用您的用户权限(可能在管理员处或附近)运行该脚本,而Jenkins以用户身份运行< strong>匿名 - 您需要确保在您以匿名身份登录时运行脚本 - 我怀疑它可能是文件/目录访问权限问题。
看看你正在尝试使用Popen - svn状态,我想知道你是否考虑过使用pysvn而不是Popen - 你会发现它更快更灵活。