我正在编写一个Jenkins管道。它首先从repo A签出,稍后应该构建并测试代码。但为此,我需要一个来自不同存储库(repoB(的特定目录。因此,我有一个从repo a克隆的第一个管道步骤签出([$class:'GitSCM']等等(,然后是从repo B克隆的第二个。因为我只需要repo B特定目录的当前版本,我认为浅层克隆和稀疏签出相结合是我的选择。
在我的Jenkins文件中,我有以下从回购B结账的选项:
extensions: [[$class: 'CleanBeforeCheckout'], [$class: 'CloneOption', shallow: true], [$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[ path: '<directory>/*']]]
没有稀疏签出选项,作业运行良好。
使用此选项,我会收到两条令人困惑的错误消息,它们都有相同的编号:
Command "git read-tree -mu HEAD" returned status code 128:
stdout:
stderr: error: Sparse checkout leaves no entry on working directory
hudson.plugins.git.GitException: Command "git checkout -f 89ab1797242776520bc708122bbf948ab8887c16" returned status code 128:
stdout:
stderr: error: Entry 'Jenkinsfile' not uptodate. Cannot update sparse checkout.
问题出在哪里?哪个错误是";正确";?不是最新的东西吗?稀疏结账可以不结账最新版本吗,即使它已经有100年的历史了?
更新1:我刚刚尝试了以下操作:在失败的基础上向Jenkins添加了新作业。运行了它。我想如果这是由于早期签出而导致的错误,就不应该在干净的工作区中发生。但它失败了,并显示了相同的错误消息。
更新:通过更改文件名,我验证了不应该是最新的文件确实是包含我正在运行的管道的文件。所以在我看来,这个文件在被詹金斯签出后被更改了。这将阻止Jenkins-git签出更多内容,因为您只能进入一个干净的工作区。
如果是这种情况,是什么原因导致幻影更新?我正在使用Windows,所以我只是把它归咎于烦人的问题。但我强制本地git提交\n行尾(通过将core.autocrlf设置为input(,更改该文件中的行尾,提交并运行作业。结果仍然是一样的。
也发生在我身上。解决方案是什么?