我正在尝试编写一个自定义步骤,它会运行一些命令,并根据某些条件返回一个失败或失败。
到目前为止,我能够继承ShellCommand;所以我可以在slave上执行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?原始的文档是一团糟,甚至谷歌返回的几个结果甚至比原始文档更加模糊。
欢迎提出任何建议;过去3天我一直在圈子里跑,并且不知道接下来要去哪看。
答案 0 :(得分:2)
使用shell命令执行多个命令的一种方法是向其传递脚本而不是命令,如此示例所示:
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做了三件事:
返回值将是等效的bash脚本之一,你可以使用bash来返回你想要的任何内容
另一个选择是为您的构建添加多个步骤