Gitlab CI: разработка проходит тестирование, обновляется версия и передается мастеру;но перебазировать, чтобы снова разработать тесты - PullRequest
0 голосов
/ 14 сентября 2018

Вопрос вкратце: я запускаю все тесты на development , как я могу предотвратить их при ребазе с master , выполненного пользователем CI?

У меня довольно распространенный подход к настройке CI, настроенный в GitLab:

  1. каждый толчок к развитию должен быть проверен
  2. при успешном тестировании: развертывание на master
  3. каждое развертывание на master решает, в зависимости от журнала фиксации, необходим ли новый SemVer. В этом случае некоторые локальные файлы версий изменяются, фиксируются, и выпуск помечается. Дополнительные development перебазируются в master (так что изменения файла версии там поддерживаются)

Это похоже на .gitlab-ci.yml

stages:
- test
- pushToMaster
- tagNewVersion
- deploy

test:
  stage: test
  only:
  - develop
  except:
    variables:
    - $CI_COMMIT_MESSAGE =~ /[TASK] Releasing/

pushToMaster:
  stage: pushToMaster
  only:
  - develop

tagNewVersion:
  stage: tagNewVersion
  only:
  - master

Теперь коммит для разработки создает следующие рабочие места:

  1. разработать "мой новый код" => test (✓) => pushToMaster (✓)
  2. master "мой новый код" => tagNewVersion (✓)
  3. x.y.z "[TASK] Выпуск версии моего проекта x.y.z" => tagNewVersion (✓)
  4. разработать "[ЗАДАНИЕ] Выпуск моей версии проекта x.y.z" => test (✓) => pushToMaster (✓, ничего не делать)

Моя цель - предотвратить 4-ую работу. Я думал, что исключение: переменные для тестирования работы добьются цели, но безрезультатно. [skip-ci] в коммите не будет работать, так как помеченная версия требует запуска CI для развертывания. Есть ли другие варианты? Как особые условия в зависимости от пользователя (реальный человек против конкретной учетной записи CI). Я не мог найти ничего, но не могу думать, что это так необычно ..

1 Ответ

0 голосов
/ 14 сентября 2018

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

Итак, ваш except должен стать:

except:
  variables:
  - $CI_COMMIT_MESSAGE =~ /\[TASK\] Releasing/
...