GitLab CI, монорепо и тематическая ветка - PullRequest
3 голосов
/ 08 марта 2019

У меня есть монорепо в GitLab с подходом Feature Branch.

Я пытаюсь запустить часть конвейера, связанную с каталогом, содержащим измененные файлы. Так что мой .gitlab-ci.yml выглядит так:

job1:
  stage: build
  script:
    - ...
  only:
    changes:
      - myparentdir/dir1/*

job2:
  stage: build
  script:
    - ...
  only:
    changes:
      - myparentdir/dir2/*
  1. Создать новую ветку от разработки
  2. Зафиксируйте myparentdir / dir2 / test.txt в этой ветке
  3. Трубопровод запускает каждую стройку!

Похоже, что GitLab рассматривает все файлы как измененные при работе с новой веткой функций.

Знаете ли вы какой-нибудь обходной путь?

1 Ответ

3 голосов
/ 09 марта 2019

Gitlab ci всегда рассматривает changes для новых ветвей как истину. Причина в том, что они не могут решить, с чем сравнивать.

это означает, что для первого конвейера новой ветки все будет построено.

См. Запрос функции для получения более подробной информации.

Но есть довольно новая функция, называемая конвейерами для запросов на слияние - которая запускает этап для запросов на слияние. Здесь - это запрос функции, который реализует changes с merge_requests. Он объединен, но я не уверен, что он уже выпущен. (рубеж 11,9 - следующий выпуск)

Тем временем вы можете реализовать его самостоятельно - вы можете добавить этап, который сравнивает изменения (git diff) и решает, следует ли запускать следующий этап:

.store_diff_from_main: &store_diff_from_main |
  git diff --name-only origin/master...HEAD > "${DIFF_FILE}"
  git diff --name-only HEAD~1 >> "${DIFF_FILE}"

.skip_stage: &skip_stage_condition |
  echo Checking for changes in ${STAGE_PATHS}, changed files
  # https://coderwall.com/p/gecfwa/git-diff-vs
  cat .diff-from-master
  # also cover merge squash cases
  if ! (cat ${DIFF_FILE} | grep -E "${STAGE_PATHS}"); then
    echo "Skipping stage ..."
    exit 0
  fi

...