Команда Git для извлечения файлов с определенным диапазоном дат и путем

#git

#git

Вопрос:

Я создаю конвейер devops, который будет извлекать файлы OpenAPI ymal из репозитория GIT, а затем запускать некоторые запросы RestAPI в другую систему (продукт управления API) для публикации API с использованием файлов ymal.

Идея состоит в том, чтобы создать задание Jenkins и сканировать репозиторий Git каждые 10 минут в поисках определенного пути (например, /myproject/openapi/ ) и расширения файла (*.ymal). Если он увидит недавние изменения (в течение 10 минут), он извлечет эти файлы и запустит скрипт для запуска API.

Может ли кто-нибудь помочь с командой Git, которая может извлекать файлы ymal?

Обратите внимание, что репозиторий Git может быть очень большим, и я хочу загружать и извлекать только те файлы, которые соответствуют критериям.

Спасибо.

Ответ №1:

Чтобы иметь возможность просматривать историю git, вам необходимо, чтобы ваш клон уже был доступен на компьютере, на котором работает Jenkins. Зная, что задание будет выполняться каждые 10 минут, вы могли бы использовать:

 git clone --single-branch --shallow-since="10 minutes ago"
  

для клонирования требуется только подмножество коммитов.

После того, как соответствующий коммит уже клонирован, вы можете использовать команду, аналогичную этой, чтобы получить информацию о файлах, измененных за последние 10 минут:

 git log --since "10 minutes ago" --format="" --name-only -- myproject/openapi/**/*.yaml
  

Пожалуйста, имейте в виду, что это жестко заданное ограничение в 10 минут может быть не очень хорошей идеей. При этом вы предполагаете, что задание действительно будет выполняться каждые 10 минут, чего может и не произойти.

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

Комментарии:

1. Спасибо. Я согласен, что жесткое кодирование 10 минут небезопасно, и подумал о сохранении некоторой информации в Jenkins. Но мы используем ферму Дженкинса, и довольно сложно синхронизировать всю информацию о предыдущих запусках. Кроме того, легко сохранить один ymal. Но поддержание любого количества файлов ymal и истории их последнего запуска может быть слишком сложным.