【问题标题】:Is it possible to have more than one source checkout step in BuildBot?BuildBot 中是否可以有多个源结帐步骤?
【发布时间】:2012-08-26 23:43:31
【问题描述】:

BuildBot 中是否可以有多个源代码签出步骤?我找不到任何明确的文档,但似乎在 BuildBot 中进行源签出也会将当前工作目录更改为签出目录,这意味着不清楚从另一个存储库“去”签出然后运行一个同时使用两者的脚本。

考虑http://buildbot.net/buildbot/docs/0.8.1/BuildFactory.html的示例:

从这些步骤来看,似乎执行了 CVS 签出,然后运行了 make build。在BuildBot中就是两步,很方便。

但是,如果您从命令行执行等效操作,则需要 三个 步骤:

cvs co $CVSROOT
cd directory_that_was_created
make build

cd directory_that_was_created 步骤在 BuildBot 中发生在哪里?

但更重要的是,如果我想要两个source.CVS(嗯,真的是source.Git)步骤怎么办?运行第二步后,我在哪个目录中?第二个 repo 是否最终位于第一个 repo 的子目录中?

使用 Git,我似乎可以将一个作为另一个的子模块,以确保它们都可以在一个步骤中被检出,但如果可能的话,我不希望这样做。

【问题讨论】:

    标签: buildbot


    【解决方案1】:

    好的,我想通了。我没有意识到每个步骤都有一个“workdir”的概念来指示“工作”发生的位置。所有步骤的默认workdir 是一个名为build 的目录。

    Source Checkout -> Common Parameters -> workdir 下的 http://buildbot.net/buildbot/docs/latest/manual/cfg-buildsteps.html 上,它确实承认源步骤是特殊的“在他们在工作目录之外执行一些操作(比如创建工作目录本身)。”

    这解释了为什么在上面的示例中没有与cd 命令相对应的显式步骤。为了解决我的问题,我创建了两个Git 步骤,每个步骤都有自己的workdir 值。随后是调用适当目录的后续ShellCommand 步骤,知道这两个workdir 目录将是彼此的兄弟。

    【讨论】:

    • 实际上,如果您使用为响应特定提交哈希而运行的调度程序,这将不起作用。在这种情况下,两个 Git 步骤都尝试在同一个哈希值处签出,该哈希值存在于一个存储库中,而不存在于另一个存储库中。我最终在ShellCommand 中运行git clone。如果Git 可以指定始终从头结帐,无论调度程序说什么,那么我就不必这样做了。
    • 这个问题可以通过在二级仓库的buildstep中指定alwaysUseLatest=True来避免,避免尝试使用其他仓库的sourceStamp。
    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多