2

我正在写一个詹金斯管道。它首先从 repo A 中检出,然后应该构建和测试代码。但为此,我需要来自不同存储库(repo B)的某个目录。所以我有一个从 repo A 克隆的第一个管道步骤 checkout([$class: 'GitSCM'] 等等),然后是从 repo B 克隆的第二个管道步骤。因为我只需要 repo 特定目录的当前版本B,我认为结合浅层克隆和稀疏结帐是我要走的路。

在我的 Jenkins 文件中,我有以下从 repo 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 签出后被更改了。这将阻止 Jenkins git 进行更多检查,因为您只能进入干净的工作区。

如果是这种情况,什么可能导致幻像更新?我使用的是 Windows,所以我只是将其归咎于烦人的 \r\n 问题。但是我强迫我的本地 git 提交 \n 行结尾(通过将 core.autocrlf 设置为输入),更改该文件中的行结尾,提交并运行该作业。结果还是一样。

4

1 回答 1

-1

也发生在我身上。解决方案是什么?

于 2022-02-03T15:03:49.950 回答