Как получить последний коммит из gocd и определить, изменил ли он какую-то конкретную папку?

Я использую инструмент непрерывной доставки Gocd + Git. Мой проект состоит из множества подпроектов. Я не хочу перестраивать все подпроекты для каждого коммита и поэтому создал один конвейер для каждого подпроекта. Я знаю, что для каждого конвейера, скажем для project1, я должен выбрать соответствующий рабочий каталог и выполнить что-то вроде этого:

  1. получить git commit, который запустил сборку gocd.
  2. определить, содержат ли изменения в этом коммите папку project1
  3. если изменения во всем проекте также повлияли на папку project1, выполните пользовательскую команду сборки для project1.

Как я могу получить коммит из gocd, который вызвал текущую сборку? Это просто последний коммит git или нет? Я считаю, что последний коммит не является безопасным вариантом в случае множества одновременных коммитов, поэтому я хочу получить его напрямую из gocd - надеюсь, он будет сохраняться для каждого события триггера сборки. Как обнаружить коммит влияет на папку в Bash?

3 ответа

Решение

Как вы сказали, вы используете разные конвейеры для каждого подпроекта.

Для быстрого взлома вы можете использовать поле "Черный список" при добавлении материала. Это в основном говорит конвейер, а не запускать (начинать сборку), когда эти файлы (введенные в поле черного списка) изменяются в коммите.

Я знаю, это немного сложно, но если вы не будете чаще менять папки подпроектов, это может решить вашу проблему.

Надеюсь это поможет:)

Частичный ответ, приведенный здесь (каждый коммит записывается в какую-то переменную окружения) https://github.com/gocd/gocd/issues/2001

Как обнаружить коммит влияет на папку в Bash?

Ты можешь использовать git diff --name-only,

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

отобразит список файлов, которые были созданы / изменены / удалены между двумя коммитами.

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

перечислит изменения внутри directory/path/

Другие вопросы по тегам