怎么提取jenkins git changes的信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么提取jenkins git changes的信息相关的知识,希望对你有一定的参考价值。

参考技术A 笨办法:首先,保证你的本地repo处于最新状态(该提交的提交了,该pull都pull好了,等等)用git reflog找到对应的commit用git reset --hard HEAD@id回退到指定的commit复制需要的文件用git pull origin master回到最新的状态 参考技术B 您好,请问您是想知道怎么提取jenkins git changes的信息吗?

使用 Jenkins 从共享文件夹上的存储库中提取时 Git 挂起

【中文标题】使用 Jenkins 从共享文件夹上的存储库中提取时 Git 挂起【英文标题】:Git hangs while pulling from repository on shared folder using Jenkins 【发布时间】:2019-06-18 09:39:39 【问题描述】:

我在工作中使用 Jenkins 从站,从站是亚马逊 Spot 实例,因此我使用共享文件夹 (EFS) 来装载共享文件夹,例如 .m2/.npm 和工作区。

当作业开始并尝试从远程 git 存储库中提取时,构建会在克隆时挂起。

当我不使用 efs 并在现场实例上克隆时,一切都按预期工作,手动或通过 efs 上的 Jenkins 创建其他文件也可以正常工作。 共享文件夹的权限与 Jenkins 使用的用户相同。

有什么建议会导致这种行为吗?

这是构建日志:

11:41:20 Fetching upstream changes from git@git.assembla.com:alpha.saas.git
11:41:20  > git --version # timeout=10
11:41:20 using GIT_SSH to set credentials jenkins@Dev_Builder(ssh)
11:41:20  > git fetch --no-tags --progress git@git.assembla.com:alpha.saas.git +refs/heads/*:refs/remotes/origin/* # timeout=5
11:41:29  > git rev-parse refs/remotes/origin/master^commit # timeout=10
11:41:29  > git rev-parse refs/remotes/origin/origin/master^commit # timeout=10
11:41:29 Checking out Revision e0dd60499d693a40fa0d3669201437b49cc2b0c4 (refs/remotes/origin/master)
11:41:29  > git config core.sparsecheckout # timeout=10
11:41:29  > git checkout -f e0dd60499d693a40fa0d3669201437b49cc2b0c4
11:48:59 Build was aborted

【问题讨论】:

【参考方案1】:

看来问题出在 git 中的大 Packfile 大小, 看起来 EFS 在处理如此大的文件时非常慢,导致它挂了这么久。 我通过使用 lsof 命令注意到了这一点:

lsof +D ./

指出index文件和packfile都打开了很长时间,而且都是大文件:

./.git/objects/pack/pack-601f9b58380bc69d49bcc429d046c8940c5ed9d2.idx

./.git/objects/pack/pack-601f9b58380bc69d49bcc429d046c8940c5ed9d2.pack

我为了解决这个问题而在 Jenkins 中使用了浅层克隆:

checkout([
        $class: 'GitSCM',
        branches: [[name: "$git_branch" ]],
        doGenerateSubmoduleConfigurations: false,
        extensions: [[$class: 'CloneOption', depth: 0, noTags: true, reference: '', shallow: true]],
        submoduleCfg: [],
        userRemoteConfigs: [[url: "$git_repo" , credentialsId: env.gitCredentialsJenkins]]])

虽然克隆 1.8GB 的​​存储库仍然需要很长时间,但这解决了问题。

【讨论】:

以上是关于怎么提取jenkins git changes的信息的主要内容,如果未能解决你的问题,请参考以下文章

特定数量的提取后,带有 Jenkins 的 Git 插件在“git reset --hard”中失败

使用 Jenkins 从共享文件夹上的存储库中提取时 Git 挂起

Jenkins - git使用Git插件请求登录凭据

在 Jenkins Pipeline/Jenkinsfile 中获取 git 分支名称

Jenkins-pipeline 从 groovy 中的属性文件中提取和设置变量

持续基础怎么搞?Jenkins+Docker+Git实战