Непрерывная Интеграция — Конвейер Ci/Cd На Базе Git Для Monorepo

  • Автор темы JuryL
  • Обновлено
  • 22, Oct 2024
  • #1

Существуют ли устоявшиеся стратегии CI/CD и лучшие практики для работы с распределенной командой в проекте, использующем монорепозитории?

Я могу предоставить два конкретных варианта использования:

  1. Работа над распространением контента, например. ежедневный/еженедельный информационный бюллетень по электронной почте в формате HTML и

  2. Каталог нескольких проектов для создания документов LaTeX.

Оба этих сценария будут использовать один и тот же конвейер CI/CD (создание/отправка электронной почты, компиляция и загрузка документа LaTeX), но с растущим и переменным объемом контента, что делает независимые репозитории для каждого документа нежелательными.

Большинство проектов, использующих монорепозитории, в настоящее время представляют собой проекты JavaScript с множеством перекрестных зависимостей от кода. Это еще один шаг вперед, но мне все же хотелось бы объединить контрольный журнал контроля версий с автоматизированным процессом разработки контента.

Компилируют ли эти проекты каждый фрагмент кода при изменении? Есть ли способ использовать git diff или использовать какой-то файл «флага» в корне репо, чтобы использовать инструменты CI/CD с монорепо?

#непрерывная-интеграция #git #travis-ci #gitlab-ci-runner

JuryL


Рег
12 Jan, 2007

Тем
90

Постов
189

Баллов
659
  • 25, Oct 2024
  • #2

Тот факт, что весь код находится в одном репозитории, не означает, что весь код меняется каждый раз при отправке коммита. Я бы сначала сделал «пути» в коде явными. Например. возможно, у вас есть несколько подкаталогов:

 
 tools/ci/core/list-dependencies.sh 

Предполагая, что приложение App1 не зависит от приложения App2, вы можете запустить его сборку, проверив, изменилось ли что-нибудь в этом каталоге (см. https://stackoverflow.com/questions/424071/how-to-list-all-the-files-in-a-commit).

Большинство инструментов непрерывной интеграции имеют плагин git или встроенную функцию, позволяющую фильтровать путь. Если бы вы использовали Jenkins, вы могли бы настроить несколько заданий, каждое из которых включало бы регион, который был бы путем, который должен быть запущен - итак, например изменения на if grep -q App1 `git diff-tree --no-commit-id --name-only -r <commit>` ; then # trigger pipeline App1 cd App1 make build make test make publish fi would trigger git diff-tree который выполняет make -f App1/Makefile or similar.

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

Вы также можете иметь один глобальный Makefile и использовать jobs/app1/ trick in the question mentioned above:

App1/* ||answer||

Я создал витрину для монорепозитория с помощью Градл как инструмент сборки и КругCI или Конвейеры Bitbucket

как инструмент CI.

Он основан на тех же идеях, что и в принятом ответе, и до сих пор я использовал аналогичную настройку в двух проектах. https://github.com/zladovan/monorepo

Видеть: - App1/ - Docs/ - Code/ - Tests/ - Makefile - App2/ - Docs/ - Code/ - Tests/ - Makefile .

 

Ассоль


Рег
18 Apr, 2007

Тем
67

Постов
207

Баллов
572
Похожие темы Дата
Похожие темы
Можно Ли Восстановить Случайно Удаленные Секреты Хранилища Hashicorp?
Docker – Как Запустить Контейнер Из Другого Контейнера, Одновременно Монтируя Том Из Первого Контейнера?
Docker – Как Предоставить Службу ( Experssjs Api ), Развернутую На Миникубе ( 192.168.49.2 ), Чтобы Иметь Возможность Доступа К Ней С Другого Устройства В Той Же Сети?
Docker – Какое Окончательное Выходное Изображение При Многоэтапной Сборке?
Конвейеры Azure Devops Работают В Неправильных Ветвях
Docker – Как Переместить Контейнерное Приложение На Другой Хост?
Amazon Ec2 — Установите Apache На Awa Ec2 С Локально Установленного Сервера Ansible На Моем Ноутбуке
Docker – Как Я Могу Отделить Сборку Кода От Сборки Контейнера Для Mr?
Дженкинс – Есть Ли В Tfs Build Что-То Вроде Файла Jenkins?
Развертывание. Можно Ли Использовать Angular Cli Для Сборки И Развертывания На Удаленном Сервере Через Ssh?
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно