Jenkins Pipeline进行了多次候选修订"并选择旧的

时间:2018-04-16 19:07:33

标签: git jenkins continuous-integration jenkins-plugins continuous-deployment

我配置了Jenkins multibranch Pipeline,它应该从远程GIT存储库获取源代码以进行构建。詹金斯似乎没有随机地#34;为构建选择一个旧提交,显示消息"多个候选修订"在构建日志文件中。

我的管道看起来像:

checkout(
        [
            $class: 'GitSCM', 
            branches: [[name: "release/0.0.1"]],
            doGenerateSubmoduleConfigurations: false, 
            extensions: [
                [$class: 'MessageExclusion', excludedMessage: '(?s)^\\[DOC\\] Robot.*']
            ], 
            submoduleCfg: [], 
            userRemoteConfigs: [[credentialsId: 'xxx', url: "https://somerepo.net/scm/someproject/somecomponent.git"]]
        ]
    )

Jenkins的日志文件显示:

[Pipeline] checkout
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://somerepo.net/scm/someproject/somecomponent.git # timeout=10
Fetching upstream changes from https://somerepo.net/scm/someproject/somecomponent.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials 
 > git fetch --tags --progress https://somerepo.net/scm/someproject/somecomponent.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse release/0.0.1^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/release/0.0.1^{commit} # timeout=10
Multiple candidate revisions
Checking out Revision 301c954e576bd3f03ef787563f159d541cb6e8d2 (release/0.0.1)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 301c954e576bd3f03ef787563f159d541cb6e8d2
Commit message: "Some old commit message"
 > git rev-list --no-walk 88be7349bd7b6ddb0654325e6b07cf1da2f8a35b # timeout=10

在日志文件中我可以看到Jenkins正在使用版本/0.0.1中的旧版本301c954e576bd3f03ef787563f159d541cb6e8d2而不是refs / remotes / origin / release / 0.0.1中的新远程版本88be7349bd7b6ddb0654325e6b07cf1da2f8a35b。

这里有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我不是git guru,但请尝试指定

分支:[[name:“* / release / 0.0.1”]],

而不是

分支:[[name:“release / 0.0.1”]],

答案 1 :(得分:1)

我认为这可能与git checkout的LocalBranch选项的使用有关。如果您以前在工作空间中使用过此功能:

extensions: [
    [$class: 'LocalBranch', localBranch: "release/0.0.1"]
]

Jenkins Git插件将在本地检出该分支(而不是仅使用当时引用的修订版)。之后,它将具有一个可以匹配的本地分支,然后再检查上游是否有新更改。听起来该准则可能是不使用LocalBranch,但在它们之间进行更改可能会导致问题。

答案 2 :(得分:0)

我遇到了同样的问题,并通过像here这样的硬方法清理工作区目录来“解决”。下次运行时,问题消失了。

旁注:“多个候选修订版” 可能this issue有关。