Buildbot:跨多个工厂的通用构建步骤
Buildbot: Common buildsteps accross multiple factories
所以我正在使用构建工厂配置 buildbot 构建器,并且有相当多的构建工厂,其中许多使用常见的构建步骤。我目前做的是:
f1 = util.BuildFactory()
f1.addStep(step1)
f1.addStep(step2)
f1.addStep(step3)
f1.addStep(f1_specific_steps)
f1.addStep(step4)
f1.addStep(step5)
f1.addStep(step6)
f2 = util.BuildFactory()
f2.addStep(step1)
f2.addStep(step2)
f2.addStep(step3)
f2.addStep(f2_specific_steps)
f2.addStep(step4)
f2.addStep(step5)
f2.addStep(step6)
这让我的 master.cfg 文件变大了。有没有办法更智能地做到这一点?像 f1 = f_common_start + f1_specific + f_common_end?
这正是您能做到的!请记住,buildbot 的配置是 python 代码。因此,使用您的示例,您可以这样做:
f_common_start = [ step1,
step2
step3, ]
f_common_end = [ step4,
step5,
step6, ]
f1_specific_steps = [ f1_step_A, f1_step_B ]
f2_specific_steps = [ f2_step_Y, f2_step_Z ]
f1 = util.BuildFactory()
f1.addSteps(f_common_start + f1_specific_steps + f_common_end)
f2 = util.BuildFactory()
f2.addSteps(f_common_start + f2 specific_steps + f_common_end)
基本上,您只是组合 Step 对象的列表。另外,请注意我正在使用 addSteps()
命令添加多个步骤。
这是一个实际的(缩短的)工作示例:
from buildbot.steps.shell import Compile, ShellCommand, Test
from buildbot.steps.transfer import DirectoryUpload
clear_dregs = [ ShellCommand(command=["find", ".", "-name", "*.units.txt", "-delete"],
workdir="build"),
RemovePYCs,
]
common_steps = clear_dregs + [
ShellCommand(command=["cmake", "../src",] workdir="build"),
Compile(command="make all"),
]
test_factory = factory.BuildFactory()
test_factory.addSteps(common_steps)
test_factory.addStep(Test(command="make test"))
docs_factory = factory.BuildFactory()
docs_factory.addSteps(common_steps)
docs_factory.addStep(Compile(command="make docs"))
docs_factory.addStep(DirectoryUpload(slavesrc="docs",
masterdest="/opt/docs/"))
rpm_factory = factory.BuildFactory()
rpm_factory.addSteps(common_steps)
rpm_factory.addStep(ShellCommand(command=["make", "rpm"]))
再次注意我在哪里使用 addStep()
和 addSteps()
。
所以我正在使用构建工厂配置 buildbot 构建器,并且有相当多的构建工厂,其中许多使用常见的构建步骤。我目前做的是:
f1 = util.BuildFactory()
f1.addStep(step1)
f1.addStep(step2)
f1.addStep(step3)
f1.addStep(f1_specific_steps)
f1.addStep(step4)
f1.addStep(step5)
f1.addStep(step6)
f2 = util.BuildFactory()
f2.addStep(step1)
f2.addStep(step2)
f2.addStep(step3)
f2.addStep(f2_specific_steps)
f2.addStep(step4)
f2.addStep(step5)
f2.addStep(step6)
这让我的 master.cfg 文件变大了。有没有办法更智能地做到这一点?像 f1 = f_common_start + f1_specific + f_common_end?
这正是您能做到的!请记住,buildbot 的配置是 python 代码。因此,使用您的示例,您可以这样做:
f_common_start = [ step1,
step2
step3, ]
f_common_end = [ step4,
step5,
step6, ]
f1_specific_steps = [ f1_step_A, f1_step_B ]
f2_specific_steps = [ f2_step_Y, f2_step_Z ]
f1 = util.BuildFactory()
f1.addSteps(f_common_start + f1_specific_steps + f_common_end)
f2 = util.BuildFactory()
f2.addSteps(f_common_start + f2 specific_steps + f_common_end)
基本上,您只是组合 Step 对象的列表。另外,请注意我正在使用 addSteps()
命令添加多个步骤。
这是一个实际的(缩短的)工作示例:
from buildbot.steps.shell import Compile, ShellCommand, Test
from buildbot.steps.transfer import DirectoryUpload
clear_dregs = [ ShellCommand(command=["find", ".", "-name", "*.units.txt", "-delete"],
workdir="build"),
RemovePYCs,
]
common_steps = clear_dregs + [
ShellCommand(command=["cmake", "../src",] workdir="build"),
Compile(command="make all"),
]
test_factory = factory.BuildFactory()
test_factory.addSteps(common_steps)
test_factory.addStep(Test(command="make test"))
docs_factory = factory.BuildFactory()
docs_factory.addSteps(common_steps)
docs_factory.addStep(Compile(command="make docs"))
docs_factory.addStep(DirectoryUpload(slavesrc="docs",
masterdest="/opt/docs/"))
rpm_factory = factory.BuildFactory()
rpm_factory.addSteps(common_steps)
rpm_factory.addStep(ShellCommand(command=["make", "rpm"]))
再次注意我在哪里使用 addStep()
和 addSteps()
。