subprocess.Popen在Jenkins CI启动时抛出错误

时间:2013-11-29 10:44:30

标签: python windows jenkins subprocess

我正在尝试从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'

1 个答案:

答案 0 :(得分:0)

当您自己运行脚本时,您将使用您的用户权限(可能在管理员处或附近)运行该脚本,而Jenkins以用户身份运行< strong>匿名 - 您需要确保在您以匿名身份登录时运行脚本 - 我怀疑它可能是文件/目录访问权限问题。

看看你正在尝试使用Popen - svn状态,我想知道你是否考虑过使用pysvn而不是Popen - 你会发现它更快更灵活。