У меня есть большой файл .gitlab-ci.yml со множеством рабочих мест.Многие из этих заданий фильтруются для запуска только в определенных ветвях.При управлении этим файлом было бы удобно определять имена этих ветвей как переменные в верхней части файла, чтобы при изменении имен ветвей нужно было обновлять только переменные.Это довольно стандартная практика для констант в большинстве языков программирования.
К сожалению, в Gitlab-CI это не выглядит так:
variables:
THIS_DOES_NOT_WORK: "this_works"
lots:
only:
refs:
- this_works
script:
- echo "lots"
of:
only:
refs:
- $THIS_DOES_NOT_WORK
script:
- echo "of"
jobs:
only:
refs:
- $THIS_DOES_NOT_WORK
script:
- echo "jobs"
В приведенном выше примере толькоБудет выполнено задание "lot", поскольку переменная THIS_DOES_NOT_WORK не раскрывается в заданиях "of" и "jobs".
В ближайшей документации , которую я могу найти , ничего не говорится оединственное: refs ключевое слово.В нем подробно рассматриваются только ключевые слова: variable.Это ключевое слово может обеспечить хороший обходной путь, если вместо этого мы можем сделать что-то вроде этого:
variables:
THIS_DOES_NOT_WORK: "this_works"
lots:
only:
variables:
- $CI_COMMIT_REF_NAME == "this_works"
script:
- echo "lots"
of:
only:
variables:
- $CI_COMMIT_REF_NAME == $THIS_DOES_NOT_WORK
script:
- echo "of"
jobs:
only:
variables:
- $CI_COMMIT_REF_NAME == $THIS_DOES_NOT_WORK
script:
- echo "jobs"
В этом случае в документации явно указано, что это не будет работать.Единственное ключевое слово: переменные, используемое для фильтрации при сравнении переменных, по иронии судьбы не способно расширять переменные.
Есть ли здесь какой-нибудь другой обходной путь?Я что-то упустил?