Jenkins性能插件:如果关键文件丢失,我可以让它进行完全同步吗



我们在半连续集成设置中成功地使用了Jenkins性能插件。"合理"通常是因为我们的构建很慢,但这与Jenkins无关,更多地与我们自己的代码有关。

我们面临的主要问题之一是,如果文件在构建之外被删除——例如,如果我们的磁盘空间不足,有人在构建机器上"修剪"构建——p4插件无法直接处理这一问题。在我们运行它的模式下(没有完全同步标志),它假设上一次运行时同步的文件仍然存在。

这包含在插件页面上的"怪癖"中-https://wiki.jenkins-ci.org/display/JENKINS/Perforce+插件-它建议您进行"一次性强制同步"以使工作区恢复正常。然而,我们通常有几个构建机器,每个配置都有一点冗余。在这种情况下,您接下来运行的机器并不总是与出现问题的机器相同。这也使得向池中添加新机器变得棘手。

我想知道是否有人有更好的解决方案。例如,如果某些关键文件丢失(表示构建被擦除),它无论如何都会进行强制同步?

好吧,我花了一段时间,但我最终找到了一种至少在我们的设置中有效的方法。在接近作业顶部的地方,我们检查是否存在特定的文件。如果这不存在,我们假设工作区已经被擦除(如果它确实存在,我们认为是可以的)。如果它已经被擦除,我们会对所有文件执行相当于"从客户端删除"的操作。事实上,我们在构建过程中修改了一些文件,所以我添加了一个reverse-in。不确定这是否是普遍需要的——我怀疑不是——但应该不会造成伤害。

在PC上,这意味着在第一个构建步骤中添加以下内容:

IF NOT EXIST //%P4CLIENT%/sdk/ChangeLog.txt (
    REM Remove from client. Throw away any files being modified
    p4 revert %WORKSPACE%/...
    p4 sync %WORKSPACE%/...#none > nul
)

在Mac(我想是Linux)上:

if ! [ -e //%P4CLIENT%/sdk/ChangeLog.txt ]
then
    # Remove from client. Throw away any files being modified
    p4 revert $WORKSPACE/...
    p4 sync $WORKSPACE/...#none > /dev/null
fi

sdk/ChangeLog.txt是我们认为标记有效安装的文件。这样做的有效作用是重置环境,使下一次同步相当于强制同步。

最新更新