如何在Jenkins中执行"git fetch --unshallow"命令?

5
我正在将SonarQube集成到Jenkins中。由于历史记录中存在大量二进制文件,我们目前使用浅克隆,因为完全克隆仓库速度较慢。SonarQube需要运行git blame,但显然在浅克隆上无法正常工作。我需要一个解决方法,但我不能更改全局Jenkins配置(这会减慢所有构建)。
情况: checkout scm可以不带参数正常工作。 sh 'git fetch --unshallow会出现错误,因为它没有凭据。
我尝试了这个可怕的东西来自定义checkout scm的参数:
checkout scm: [
    $class: 'GitSCM', userRemoteConfigs: [
        [url: env.repoURL, credentialsId: 'GitHubEnterprise']
    ], extensions: [
        [$class: 'CheckoutOption', timeout: 60],
        [$class: 'CloneOption', noTags: true,
            reference: '/var/lib/gitchcache/reference.git',
            shallow: false, timeout: 60]
    ], branches: [
        [name: branch]
    ]
], remoteName: "origin", poll: false, clearWorkspace: true

但我遇到了这个错误:
> git rev-parse PR-42^{commit} # timeout=10

Couldn't find any revision to build. Verify the repository
and branch configuration for this job.

报告的问题似乎集中在未提供“存储库名称”上。 我正在尝试构建一个拉取请求,但它没有更改的refspec。我不知道为什么它无法推断出来,但它确实没有。以下是解决第一部分的方法:
checkout scm: [$class: 'GitSCM',
               userRemoteConfigs: [
                       [url: env.GIT_URL,
                        refspec: "+refs/pull/${prNumber}/head:refs/remotes/origin/${branch}",
                        credentialsId: 'GitHubEnterprise']
               ],
               extensions: [
                       [$class: 'CloneOption',
                        shallow: false,
                        timeout: 60]
               ],
               branches: [
                       [name: branch]
               ]
]

结账功能和构建功能都正常,但我仍然获得了一个浅层次的结账。
INFO: SCM provider for this project is: git
INFO: 1 files to be analyzed
WARN: Shallow clone detected, no blame information will be provided. You can convert to non-shallow with 'git fetch --unshallow'.
INFO: 0/1 files analyzed
WARN: Missing blame information for the following files:
WARN:   * src/main/java/com/example/Example.java

以下是我在Jenkins配置中的项目-GitHub组织下所拥有的内容:

高级克隆行为

以下是我想要在特定构建步骤中使用的内容:checkout scm,但代码中有“未选中”的浅层。

如何在Jenkins中执行git fetch --unshallow?

1个回答

3
截至版本git-4.0.0-beta3,使用git jenkins插件是不可能实现的。源代码中没有任何支持或提到git fetchunshallow参数。
您可以按原样留下git jenkins插件选项:浅层首次获取,这样速度更快。
然后您有一些选择:
  • 在构建的执行 shell 中,您可以直接使用git而不是通过插件运行unshallow过程。
  • 如果这会减慢太多构建,请在SonarQube进入工作区之前进行预运行步骤并运行unshallow过程。这可以通过Groovy脚本等方式完成。

谢谢您的澄清,我很感激。我在使用sh 'git fetch --unshallow'时遇到了身份验证失败的问题。是否有什么技巧可以从checkout scm中运行Git命令行并带有凭据? - Alain O'Dea
你可能需要将执行git命令的用户的公钥添加到你的代码库中允许的密钥列表中。 - Martin
请参见JENKINS-28335 - Jesse Glick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接