使用Maven多模块项目和Jenkins的Git提交历史记录问题

时间:2019-12-13 07:00:41

标签: git maven jenkins multi-module

说明:

我们有一个多模块Maven项目,我们使用Jenkins作为CI工具。我的主要目标是检测上次提交影响了哪些模块,并仅构建那些模块(及其依赖项)。我已经对SO和博客文章进行了几次搜索,并决定使用这种方式:

  • 将某些分支克隆到Jenkins
  • git rev-list --parents -n 1 <branch-name>(获得当前提交的哈希值和最后一次提交的哈希值。它给我2个输出hash1和hash2)
  • git diff --name-status <hash1> <hash2>(以获取最后两次提交之间的差异)

此行之后的输出是:

   M       moduleA/src/main/java/path/to/changed/files 
   M       moduleB/src/main/java/path/to/changed/files
  • 因此我们编写了一个bash脚本,以仅从输出中获取“ moduleA,moduleB”字符串,并将其放入:

mvn install -amd -pl ${changed_module_names}

一切正常。但是还有另一个问题。

问题:

让我们说我对本地计算机中的代码做了一些更改,并且我知道远程存储库中也有一些更改。因此,我使用以下命令将其推送到远程:

  • git pull
  • git添加/提交
  • git push origin <branch>

执行完这些命令后,我可以在远程存储库中看到一个(!)提交历史记录,可以: enter image description here

但是在第二种情况下,假设我不知道远程存储库中的更改。所以我用:

  • git添加/提交
  • git push origin <branch>
  • 它给出了错误,我需要拉
  • git pull
  • git push origin <branch>

这些步骤之后,我在远程存储库中看到两个提交历史记录:(“ test”是我的实际提交) enter image description here

因此它与我们的Jenkins脚本产生冲突:

git rev-list --parents -n 1 `<branch-name>`

因为在这种情况下,它输出3个散列而我希望有2个输出。

如何处理这种情况?可能有人会忘记在git push之前先进行git pull,这会破坏我们的管道。

如果需要更多说明,请告诉我

0 个答案:

没有答案