我正在尝试编写一个自定义步骤,该步骤将运行一些命令,并根据某些条件返回错误或失败。
到目前为止,我能够继承ShellCommand。所以我可以在从站上执行一个shell命令。现在,下一步是编写将不仅执行一个shell命令,而且执行各种命令的东西,并将分析这些命令的结果并采取相应的措施。
尽管我在这项工作中没有取得成功。到目前为止,我只能继承ShellCommand。但这允许我只运行一个命令。
我发现ShellCommand使用buildstep.remoteCommand和remoteShellCommand;但是我尝试将buildstep.BuildStep子类化是失败的。
我要完成的目标是运行有限数量的python或shell命令(无需编写shell脚本并从python调用它;我能够完成此操作),并分析来自这些操作的结果,因此我可以指示步骤是否通过或失败,以及记录的内容。
到目前为止,这就是我所拥有的:
class myclass(build step.BuildStep)
def __init__(self, **kwargs):
buildstep.BuildStep.__init__(self, **kwargs)
def start(self):
cmd=buildstep.RemoteShellCommand({'command':"ls -la"})
self.setupEnvironment(cmd)
d=self.runCommand(cmd)
return d
这将运行,并且在remoteShellCommand行上会出现错误,说
exceptions.TypeError: __init__() takes at least 3 arguments (2 given)
我已经尝试过remoteCommand和remoteShellCommand,结果是相同的。
检查这两个的init,我看不到3个参数,而只看到命令,所以我真的不确定什么地方出错了。我什至尝试使用** kwargs,但收到一个错误消息,说未定义kwarg(博客中有一个示例,该示例将使用kwargs;因此我尝试了,但无论如何都无法正常工作)。
这是remoteShellCommand的原始文档:
[原始Buildbot API文档] [1]
您知道在哪里可以找到一个示例,该示例实际上向我展示了如何完成此操作,或者至少您实际如何使用remoteCommand / remoteShellCommand?原始文档简直一团糟,即使Google返回的结果也很少,甚至比原始文档还晦涩难懂。
欢迎任何建议;在过去的三天里,我一直在圈子里奔跑,不知道下一步去哪里。
最佳答案
使shellcommand执行多个命令的一种方法是向其传递脚本而不是如本示例所示的命令:
class CoverageReport(ShellCommand):
def __init__(self):
self.coverage_path = '/var/www/coverage'
command = '''rm -rf htmlcov
coverage html
cp htmlcov/* %s/''' % self.coverage_path
description = 'Generating coverage report'
workdir = 'build/python'
self.url = "https://XXXXXXXX/coverage"
ShellCommand.__init__(self, command=command, description=description, workdir=workdir)
这个Shellcommand可以做三件事:
删除旧报告
生成新报告
将报告复制到www文件夹
返回值将是等效的bash脚本之一,您可能可以玩bash来返回所需的任何内容
另一个选择是向构建添加多个步骤
关于python - 自定义buildbot步骤类-如何使用remoteCommand/remoteShellCommand制作自己的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23193025/