Избегайте избыточности путей в Gitlab CI include

#continuous-integration #gitlab #include #gitlab-ci

#непрерывная интеграция #gitlab #включить #gitlab-ci

Вопрос:

Чтобы улучшить структуру моего файла Gitlab CI, я включаю некоторые конкретные файлы, например,

 include:
  - '/ci/config/linux.yml'
  - '/ci/config/windows.yml'
  # ... more includes
 

Чтобы избежать подверженной ошибкам избыточности пути, я подумал поместить его в переменную, например:

 variables:
  CI_CONFIG_DIR: '/ci/config'

include:
  - '${CI_CONFIG_DIR}/linux.yml'    # ERROR: "Local file `${CI_CONFIG_DIR}/linux.yml` does not exist!"
  - '${CI_CONFIG_DIR}/windows.yml'
  # ... more includes
 

Но это не работает. Gitlab CI утверждает, что ${CI_CONFIG_DIR}/linux.yml этого не существует, хотя в документации говорится, что переменные во включаемых путях разрешены, см. https://docs.gitlab.com/ee/ci/variables/where_variables_can_be_used.html#gitlab-ciyml-file .

Что также не сработало, так это включить файл /ci/config/main.yml и из него включить конкретные конфигурации без путей:

 # /ci/config/main.yml
include:
  - 'linux.yml'    # ERROR: "Local file `linux.yml` does not exist!"
  - 'windows.yml'
  # ... more includes
 

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

Ответ №1:

Похоже, на данный момент это не реализовано, и на данный момент в отставании есть открытая проблема.

Кроме того, в документации говорится, что вы можете использовать variables в include разделах, они предназначены только для предопределенных переменных.

Комментарии:

1. Спасибо. Я боялся, что это будет ответ, но надеялся на что-то другое. По крайней мере, теперь я знаю, что люди работают над этим. Что касается документов, вы заставили меня понять, что я не уделял достаточного внимания пунктуации, а именно двоеточию, поэтому я подумал, что ограничен только именами для своих собственных переменных.

2. Приведенный пример показывает, что он не только предопределен: OUT_PATH и PACKAGE_PATH были динамически сгенерированы из предопределенного, но можно предположить, что предопределенное также может быть заменено строкой, и вы могли бы заставить его работать; просто сделав это примечание.

Ответ №2:

Посмотрите, может ли помочь GitLab 14.2 (август 2021):

Используйте переменные CI / CD в операторах include в .gitlab-ci.yml

Теперь вы можете использовать переменные как часть include инструкций в .gitlab-ci.yml файлах.
Эти переменные могут быть переменными экземпляра, группы или проекта CI / CD.

Это улучшение обеспечивает большую гибкость при определении конвейеров.
Вы можете скопировать один и тот же .gitlab-ci.yml файл в несколько проектов и использовать переменные для изменения его поведения.
Это позволяет уменьшить дублирование в .gitlab-ci.yml файле и уменьшает необходимость сложной настройки для каждого проекта.

https://about.gitlab.com/images/14_2/pipeline_include_variables.png -- Использовать переменные CI / CD в операторах include в .gitlab-ci.yml

См. Документацию и проблему.

Комментарии:

1. Спасибо, что указали на это. Теперь я с нетерпением жду, когда моя организация обновится до 14.2 (в настоящее время мы находимся на 14.0), чтобы попробовать это.

2. @bjhend OK. Не забудьте обновить эту страницу, если это действительно работает.