# #gitlab #continuous-integration #gitlab-ci
Вопрос:
В моем проекте Gitlab я включаю несколько файлов .yml. Один из них является удаленным, а другой-шаблоном, предоставляемым Gitlab для обеспечения качества кода.
Конфигурация .yml написана так:
include:
- template: Code-Quality.gitlab-ci.yml
- remote: 'https://raw.githubusercontent.com/checkmarx-ltd/cx-flow/develop/templates/gitlab/v3/Checkmarx.gitlab-ci.yml'
Оба этих шаблона доступны. Первый находится здесь, а второй-здесь.
Обе эти конфигурации .yml определяют задания, которые выполняются на этапе test
конвейера.
У меня возникла проблема, когда на этапе выполняются только задания второго включения test
, а задание качества кода Gitlab полностью игнорируется. Если я удалю внешний флажок включить, задание качества кода будет выполняться просто отлично.
Обычно я бы просто определил отдельные этапы, но с этих пор .файлы yml не принадлежат мне, я не могу изменить стадию, на которой они выполняются.
Есть ли способ обеспечить выполнение всех заданий на test
этапе? Если нет, есть ли способ переопределить этап, на котором выполняется задание из внешнего файла .yml?
Ответ №1:
Как ни странно, похоже, что между двумя шаблонами существует какой-то конфликт правил, возможно, из-за переменных, которые задает шаблон checkmarx. Несмотря на то, что линт CI показывает, что все 4 задания должны выполняться успешно, я могу воспроизвести вашу проблему с помощью приведенного выше кода.
Учитывая, что это, скорее всего, проблема с правилами, я отменил правила выполнения code_quality
задания и смог запустить оба в одном конвейере:
include:
- template: Code-Quality.gitlab-ci.yml
- remote: 'https://raw.githubusercontent.com/checkmarx-ltd/cx-flow/develop/templates/gitlab/v3/Checkmarx.gitlab-ci.yml'
code_quality:
rules:
- when: on_success
Вы можете внести вышеуказанные изменения, чтобы подтвердить их успешность (хотя GitLab предупредит вас, что без каких-либо правил workflow:вы получите дубликаты трубопроводов внутри MRs, что верно).
Вы также можете увидеть конвейер, работающий с обоими заданиями, здесь, хотя checkmarx не работает, потому что у меня нет подписки для его тестирования:
Комментарии:
1. Отличный ответ! На самом деле я сделал то же самое решение, переопределив code_quality для выполнения запросов на слияние (я не знал, что вы даже можете переопределить поведение в заданиях шаблонов) — в итоге это сработало. Теперь, с вашим решением, мне интересно, есть ли какая-то рифма или причина, или это ошибка в конце синтаксического анализа Gitlab… Спасибо!