我有一个很大的git repo和多分支管道。我开始在Jenkins中使用git参考资料库。 (创建了一个文件夹并应用了git clone --mirror git@github.com:my-user/my-repository.git
)
在构建日志中,它显示“正在使用参考库”。但是我没有任何速度上的提高。我是否需要在Jenkins管道代码中进行修改?
例如,我在管道中有一些命令,如下所示:
checkout scm
stdout = bat(returnStdout: true, script: "git reset --hard");
stdout = bat(returnStdout: true, script: "git checkout master");
stdout = bat(returnStdout: true, script: "git fetch --tags origin");
该命令是否使用参考资料库?
答案 0 :(得分:0)
该命令是否使用参考资料库?
git reset
或git checkout
的否:使用本地克隆存储库而不是远程存储库的那些本地命令。
git fetch --tags origin
是。可以肯定的是,添加带有git remote -v
的步骤,以确认origin
的确是git@github.com:my-user/my-repository.git
答案 1 :(得分:0)
请参阅此票证:https://issues.jenkins-ci.org/browse/JENKINS-54612
在使用管道时,似乎会忽略参考资料库。我看到的是相同的行为,所以看来您没有看到任何加速的原因是因为没有任何形式的加速。
如果您查看Jenkins日志,则会看到执行的git命令不包含克隆。它执行git init,然后添加远程,然后获取。它不会使用--reference进行克隆,也不会手动设置信息/替代项。因此,它总是要从远程进行完全克隆。
一种可能的解决方法是在真实遥控器之前添加第二个遥控器。代替URL,使用引用存储库的本地路径。这直接对我有用git命令行。当我与詹金斯一起尝试时,它超时了。但是,这可能是我正在测试的奴隶的特质,可能仍然值得自己尝试一下。如果这行得通,请确保使用临时工作区来控制空间利用率,因为它是复制而不是引用,但是仍然比下载整个存储库快得多。
答案 2 :(得分:0)
根据我们的经验:
引用存储库确实适用于git clone
。在我们的环境中,这一步从30多分钟降到了不到一分钟。基本上是说:“如果我需要从git中带一个大blob,但它已经在镜像中,那么让我们节省一些时间从镜像中移出它。”
镜像需要经常更新。我们有一份工作每天要完成3-4次。
git checkout
需要来自镜像和远程仓库的数据,因为无法可靠地依靠镜像进行更新。最新的更改是从远程带来的。
有点违反常理,当您不使用任何快捷方式来使操作更快时,操作会更快。具体来说,限制--depth
会降低使用镜像时的速度。
如果曾经在没有镜像的情况下克隆了一个仓库,那么它将永远不会使用镜像。您可能要擦除存储库,然后使用镜像重新创建它。
最后,您可以使用以下命令检查Jenkins从站上的速度改进(如果有):
mkdir -p tmp && git clone git@github.com:my_org/my_repo.git tmp --reference /path/to/reference/my_repo.git/