Jenkins管道中的Git结账错过了提交标记

时间:2018-01-30 20:11:20

标签: git jenkins tags jenkins-pipeline gerrit

我的一个Jenkins管道作业应该考虑当前构建的提交上的标记。但似乎最顶层提交的标记在构建时不可用。

我们说我有三个提交的简单历史记录:

 my_commit_to_build (tagged v2)
            |
            v
   another_commit (tagged v1)
            |
            v
      initial_commit

我的管道脚本包含此结帐步骤:

checkout(
    changelog: false,
    poll: false,
    scm: [
        $class           : 'GitSCM',
        userRemoteConfigs: [
            [
                url          : <SCM_URL>,
                credentialsId: <CREDENTIALS_ID>,
                refspec      : <REFSPEC_TO_BUILD>
            ]
        ],
        branches         : [
            [
                name: <REFSPEC_TO_BUILD>
            ]
        ],
        extensions       : [
            [$class: 'BuildChooserSetting', buildChooser: [$class: 'GerritTriggerBuildChooser']],
            [$class: 'LocalBranch', localBranch: <LOCAL_BRANCH_NAME>],
            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
            [$class: 'PruneStaleBranch'],
            [$class: 'CleanCheckout']
        ]
    ]
)

这会导致作业运行以下命令:

Cloning the remote Git repository
Cloning repository <SCM_URL>
> git init /home/jenkins/workspace/<WORKSPACE> # timeout=10
Fetching upstream changes from <SCM_URL>
> git --version # timeout=10
using GIT_SSH to set credentials SSH Key for <USER>
> git fetch --tags --progress <SCM_URL> +refs/heads/*:refs/remotes/origin/*
> git config remote.origin.url <SCM_URL> # timeout=10
> git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
> git config remote.origin.url <SCM_URL> # timeout=10
Pruning obsolete local branches
Fetching upstream changes from <SCM_URL>
using GIT_SSH to set credentials SSH Key for <USER>
> git fetch --tags --progress <SCM_URL> --prune
> git rev-parse <REV>^{commit} # timeout=10
Checking out Revision <REV> (<LOCAL_BRANCH_NAME>)
> git config core.sparsecheckout # timeout=10
> git checkout -f <REV>
> git branch -a -v --no-abbrev # timeout=10
> git checkout -b <LOCAL_BRANCH_NAME> <REV>
Commit message: "my_commit_to_build"
Cleaning workspace
> git rev-parse --verify HEAD # timeout=10
Resetting working tree
> git reset --hard # timeout=10
> git clean -fdx # timeout=10

当我现在检查最顶层提交的标记的repo的本地副本以及历史记录中找到的最后一个提交时,我得到以下内容:

> git --no-pager tag -l --points-at=HEAD
> git describe --abbrev=0 --tags
v1
> ...

我已经尝试从fetch命令和prune结帐中删除sparse,但两者都没有帮助(无论如何我对这两个人没有任何希望...... )。

有没有人知道我应该如何调整我的结帐步骤,以便在构建时标签可用?

提前致谢!

1 个答案:

答案 0 :(得分:0)

作为评论可能会更好,但我还无法添加它们。

我测试了一个类似的repo,它具有相同的扩展名,但BuildChooserSetting除外,它按预期工作。

您确定要检出的分支是否包含该标记?另外,git tag的输出是什么?