GitLab CI Как запустить конвейер для подмодулей в многомодульном проекте maven

У меня есть многомодульный проект Maven:

root
    SubmoduleA
        src
        pom.xml      
    SubmoduleB
        src
        pom.xml
    pom.xml
    .gitlab-ci.yml

Есть ли способ запустить конвейер CI только в SubmoduleA, когда кто-то проверяет код, который влияет только на SubmoduleA? Например, кто-то вносит изменения в SubmoduleA. После фиксации и отправки я хочу автоматически запускать build-> test-> deploy только в SubmoduleA, поскольку в SubmoduleB не было изменений.

Есть ли способ указать триггеры и задания для определенных подмодулей или подпроектов в репо?


person Vince    schedule 22.09.2016    source источник


Ответы (2)


Я считаю, что вам нужно создать проект gitlab для этого подмодуля, и этому подмодулю нужен собственный .gitlab-ci.yml. На этом этапе его можно будет построить внутри самого gitlab-ci-runner.

Я не эксперт в Maven (или Java), но полагаю, что в более крупных проектах ваши подмодули могут стать отдельными двоичными встроенными библиотеками, хранящимися в ваших собственных репозиториях. Вы как производите, так и потребляете банки в своей сборке и обслуживаете их, используя сам Maven. Затем Maven может загрузить для вас, используя свои встроенные функции разрешения зависимостей и выборки пакетов, и, возможно, вам будет лучше в сценарии сборки большого проекта Java с этим, чем с подмодулями git.

Я делаю это прямо сейчас в мире .Net с настраиваемым фидом nuget, и результаты аналогичны тому, что вы делаете, в том, что сборки происходят, и ресурсы сервера сборки не тратятся впустую из-за включения источника и повторной компиляции этих модулей в секунду время.

person Warren P    schedule 11.10.2016

Gitlab может запускать задание при изменении каталога: https://docs.gitlab.com/ee/ci/yaml/#onlychanges

Для этого решения:

  • вы должны включить кеш gitlab для репозитория maven, чтобы сохранить предыдущие модули сборки.
  • тогда вы можете определить задание для изменения пути
stages:
  - modules
  - build

moduleB:
  stage: modules
  script: 
    - mvn $MAVEN_OPTS -pl projectB clean install --also-make $MAVEN_CLI_OPTS
  only:
    changes:
      - projectB/**

master_job:
  stage: build
  dependencies:
    - projectB
  script:
    - >
      mvn $MAVEN_OPTS -pl projectA clean install $MAVEN_CLI_OPTS
person x0r    schedule 27.08.2019