如何从 gocd 获取最新提交并检测它是否更改了某些特定文件夹?

How get latest commit from gocd and detect did it change some specific folder?

我正在使用 gocd 持续交付工具 + git。我的项目由许多子项目组成。我不想在每次提交时重建所有子项目,因此为每个子项目创建了一个管道。我知道,对于每个管道,比如项目 1,我必须选择合适的工作目录和 运行 smth 这样的:

  1. 获取触发 gocd 构建的 git 提交。
  2. 检测是否 该提交中的更改包含 project1 文件夹
  3. 如果改变 整个项目也影响了 project1 文件夹 运行 自定义构建命令 对于项目 1.

我如何从触发当前构建的 gocd 获取提交? 是否只是 git 的最新提交?我认为在许多并发提交的情况下最新提交不是安全选项,这就是为什么我想直接从 gocd 获取它——我希望它为每个构建触发事件存储它。 检测提交如何影响 bash 中的文件夹?

How detect commit affects on folder in bash?

您可以使用 git diff --name-only.

git diff --name-only <commit1> <commit2>

将列出两次提交之间创建/修改/删除的文件。

git diff --name-only <commit1> <commit2> -- directory/path/

会列出directory/path/

里面的修改

这里给出了部分答案(每个提交都写入了某个环境变量)https://github.com/gocd/gocd/issues/2001

如您所说,您为每个子项目使用了不同的管道。

为了快速破解,您可以在添加 material 时使用 "Blacklist" 字段。它基本上说管道,not 在提交中更改这些文件(在黑名单字段中输入)时触发(开始构建)。

我知道,这有点棘手,但如果你不经常更改你的子项目文件夹,这可以解决你的问题。

希望对您有所帮助:)