Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins perforce插件:如果关键文件丢失,我可以让它进行完全同步吗?_Jenkins_Jenkins Plugins - Fatal编程技术网

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

Jenkins perforce插件:如果关键文件丢失,我可以让它进行完全同步吗?,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我们在半连续集成设置中合理成功地使用了Jenkins Performance插件。通常情况下,由于我们的构建速度很慢,这是“合理的”,但这与Jenkins无关,更与我们自己的代码有关 我们面临的一个主要问题是,如果文件在构建之外被删除——例如,如果磁盘空间不足,有人在构建机器上“修剪”构建——p4插件无法直接处理这一问题。在我们运行它的模式下(不带完全同步标志),它假定上一次运行时同步的文件仍然存在 这在插件页面的“怪癖”部分有介绍——建议您进行“一次性强制同步”以使工作区恢复正常。然而,我们通

我们在半连续集成设置中合理成功地使用了Jenkins Performance插件。通常情况下,由于我们的构建速度很慢,这是“合理的”,但这与Jenkins无关,更与我们自己的代码有关

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

这在插件页面的“怪癖”部分有介绍——建议您进行“一次性强制同步”以使工作区恢复正常。然而,我们通常有两个构建机器,每个配置都有一点冗余。在这种情况下,下一台运行的机器并不总是与出现问题的机器相同。这也使得向池中添加新机器变得棘手


我想知道是否有人有更好的解决办法。例如,如果某些关键文件丢失(表示正在擦除某个构建),它仍然会执行强制同步?

好吧,我花了一些时间,但我最终找到了一种至少在我们的设置中有效的方法。在接近作业顶部时,我们检查是否存在特定文件。如果这不存在,我们假设工作区已经被擦除(如果它确实存在,我们假设它是OK的)。如果它已被擦除,我们将对所有文件执行相当于“从客户端删除”的操作。事实上,我们在构建过程中修改了一些文件,因此我添加了一个恢复,以便更好地度量。我不确定这是否是普遍需要的——我怀疑不是——但应该不会有什么坏处

在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)上:

sdk/ChangeLog.txt是我们假定的标记为有效安装的文件。有效的做法是重置环境,使下一次同步等同于强制同步

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