自定义buildbot步骤类 - 如何使用remoteCommand / remoteShellCommand创建自己的步骤类

时间:2014-04-21 07:37:40

标签: python buildbot

我正在尝试编写一个自定义步骤,它会运行一些命令,并根据某些条件返回一个失败或失败。

到目前为止,我能够继承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天我一直在圈子里跑,并且不知道接下来要去哪看。

1 个答案:

答案 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做了三件事:

  1. 删除旧报告
  2. 生成新报告
  3. 将报告复制到www文件夹
  4. 返回值将是等效的bash脚本之一,你可以使用bash来返回你想要的任何内容

    另一个选择是为您的构建添加多个步骤