Gitlab-CI поддерживает расширение переменных только внутри: refs? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть большой файл .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"

В этом случае в документации явно указано, что это не будет работать.Единственное ключевое слово: переменные, используемое для фильтрации при сравнении переменных, по иронии судьбы не способно расширять переменные.

Есть ли здесь какой-нибудь другой обходной путь?Я что-то упустил?

1 Ответ

0 голосов
/ 09 июля 2019

Согласно https://docs.gitlab.com/ee/ci/variables/where_variables_can_be_used.html, кажется, что возможности конвейера ci увеличились, и теперь он может реально расширять переменные.Для меня решением было использовать части вашего примера:

jobs:
  only:
    variables:
      - $THIS_DOES_WORK == $CI_COMMIT_REF_NAME
  script:
    - echo "jobs"

В моем случае $ THIS_DOES_WORK - это переменная, передаваемая из интерфейса пользователя gitlab через вкладку переменных CI / CD.Gitlab заявляет, что переменные ограничений, используемые в этой области видимости, имеют:

Переменная должна иметь форму $ variable.Не поддерживаются следующие параметры:

  • Переменные, основанные на имени среды (CI_ENVIRONMENT_NAME, CI_ENVIRONMENT_SLUG).
  • Любые другие переменные, относящиеся к среде (в настоящее время только CI_ENVIRONMENT_URL).
  • Сохраняемые переменные .

Кроме того, следует обратить внимание, что переменная не установлена ​​в защищенную, если она работает в незащищенной ветви.

...