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