Как получить последний коммит из gocd и определить, изменил ли он какую-то конкретную папку?
Я использую инструмент непрерывной доставки Gocd + Git. Мой проект состоит из множества подпроектов. Я не хочу перестраивать все подпроекты для каждого коммита и поэтому создал один конвейер для каждого подпроекта. Я знаю, что для каждого конвейера, скажем для project1, я должен выбрать соответствующий рабочий каталог и выполнить что-то вроде этого:
- получить git commit, который запустил сборку gocd.
- определить, содержат ли изменения в этом коммите папку project1
- если изменения во всем проекте также повлияли на папку 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/