如何在Jenkins中git提取--unshallow?

时间:2018-09-28 16:27:57

标签: git jenkins github jenkins-pipeline

我正在将SonarQube集成到Jenkins中。当前,我们使用浅层克隆,因为在历史记录中给定较大的二进制文件的情况下,我们的存储库很难完全克隆出克隆。 SonarQube需要运行git blame,这显然不适用于浅克隆。我需要一种解决方法,但不能更改全局Jenkins配置(这会减慢所有构建的速度)。

情况:

checkout scm不带参数。

sh 'git fetch --unshallow由于没有凭据而出错。

我已经尝试过这种怪异来自定义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

这是我在Project-Jenkins配置中的GitHub Organization下拥有的东西: Advanced clone behaviours

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

如何在Jenkins中获取--unshallow?

1 个答案:

答案 0 :(得分:2)

使用git-4.0.0-beta3版本的git jenkins插件是不可能的。 unshallow的{​​{1}}参数的源代码中的There is no support or mention whatsoever

您所能做的就是直接保留git jenkins插件选项:先浅提取,以便更快。

然后您有一些选择:

  • 在构建的执行外壳中,您可以直接使用git fetch而不是通过插件来运行不精简的过程。
  • 如果这会减慢太多构建的速度,请在SonarQube进入工作区并运行非浅层程序之前执行一个预运行步骤。除其他外,这可以通过Groovy脚本来完成。