подстановка переменных (или переопределение) при расширении заданий из шаблонов gitlab без добавления include - PullRequest
0 голосов
/ 10 февраля 2020

Используя gitlab ci, у меня есть репозиторий, в котором созданы все мои шаблоны. Например, у меня есть шаблон задания сканера сонаров с именем .sonar-scanner.yml:

sonar-analysis:
  stage: quality
  image:
    name: sonar-scanner-ci:latest
    entrypoint: [""]
  script:
    - sonar-scanner
      -D"sonar.projectKey=${SONAR_PROJECT_NAME}"
      -D"sonar.login=${SONAR_LOGIN}"
      -D"sonar.host.url=${SONAR_SERVER}"
      -D"sonar.projectVersion=${CI_COMMIT_SHORT_SHA}"
      -D"sonar.projectBaseDir=${CI_PROJECT_DIR}"

. Я включил этот шаблон как проект в файл ci основного gitlab:

include: 
  - project: 'organization/group/ci-template'
    ref: master
    file: '.sonar-scanner.yml'

Так как вы понимаете, у меня есть репозиторий ci-templates, в котором созданы все мои шаблоны. И в другом репо я расширяю, используя , включая эти шаблоны.

Наконец, в репо, когда создается новый запрос на слияние, моя работа для сонара выполняется под другим файлом в моем проекте test/quality.yml:

sonar:
  stage: quality
  extends: 
    - sonar-analysis 
  allow_failure: true
  only:
    refs:
      - merge_requests

Все работает хорошо, кроме замены или переопределения моего env var. Действительно моего шаблона. У меня много имен серверов или проектов сонара. Я хотел бы знать, как переопределить эти переменные SONAR_SERVER и SONAR_PROJECT_NAME при расширении задания из шаблона.

В моем основном файле .gitlab-ci.yml у меня есть объявление раздела переменных, и когда я переопределяю эти переменные, это работает. Но это не совсем то, чего я хочу. Используя много этапов и множество микро-услуг, можно повторно использовать одну и ту же работу по-разному. Что я действительно хочу сделать, это переопределить эти переменные непосредственно в файле test/quality.yml.

Это, например, не работает:

sonar:
  stage: quality
  extends: 
    - sonar-analysis
  variables:
    SONAR_PROJECT_NAME: foo
    SONAR_SERVER: bar
  allow_failure: true
  only:
    refs:
      - merge_requests

Это тоже не работает:

variables:
  SONAR_PROJECT_NAME: foo
  SONAR_SERVER: bar

sonar:
  stage: quality
  extends: 
    - sonar-analysis 
  allow_failure: true
  only:
    refs:
      - merge_requests

Как лучше всего сделать эту работу?

...