使用Git参考资料库时,我需要在管道代码中进行修改

时间:2019-07-25 15:42:02

标签: git jenkins jenkins-pipeline git-checkout

我有一个很大的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");

该命令是否使用参考资料库?

3 个答案:

答案 0 :(得分:0)

  

该命令是否使用参考资料库?

git resetgit 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)

根据我们的经验:

  1. 引用存储库确实适用于git clone。在我们的环境中,这一步从30多分钟降到了不到一分钟。基本上是说:“如果我需要从git中带一个大blob,但它已经在镜像中,那么让我们节省一些时间从镜像中移出它。”

  2. 镜像需要经常更新。我们有一份工作每天要完成3-4次。

  3. git checkout需要来自镜像和远程仓库的数据,因为无法可靠地依靠镜像进行更新。最新的更改是从远程带来的。

  4. 有点违反常理,当您不使用任何快捷方式来使操作更快时,操作会更快。具体来说,限制--depth会降低使用镜像时的速度。

  5. 如果曾经在没有镜像的情况下克隆了一个仓库,那么它将永远不会使用镜像。您可能要擦除存储库,然后使用镜像重新创建它。

最后,您可以使用以下命令检查Jenkins从站上的速度改进(如果有):

mkdir -p tmp && git clone git@github.com:my_org/my_repo.git tmp --reference  /path/to/reference/my_repo.git/