Gitlab-CI: Как использовать потребности с параллельной матрицей (или другой способ обработки многоступенчатой CI с потребностями)

# #gitlab #yaml #gitlab-ci #gitlab-ci-runner

Вопрос:

У меня есть вариант использования Gitlab-CI, который я не могу правильно понять. Предыстория заключается в том, что у меня есть несколько сред, в которых необходимо создавать и развертывать свои собственные артефакты. Допустим, упрощенный случай выглядит так:

 stages:
  - build
  - deploy

AppOne:Build:
  extends: .build
  environment:
    name: AppOne

AppOne:Deploy:
  extends: .deploy
  needs: ['AppOne:Build']
  environment:
    name: AppOne

AppTwo:Build:
  extends: .build
  environment:
    name: AppTwo

AppTwo:Deploy:
  extends: .deploy
  needs: ['AppTwo:Build']
  environment:
    name: AppTwo

.build:
  stage: build
  script:
    - build.sh

.deploy:
  stage: deploy
  when: manual
  script:
    - deploy.sh
 

Описанный выше процесс работает, но, как вы можете видеть, он довольно долгий и повторяющийся с двумя приложениями и очень простым процессом. Реальный процесс состоит из трех этапов и до 20 приложений. Я хотел бы знать, есть ли лучший способ выразить это? Процессы сборки идентичны, за исключением переменной (заданной в среде).

Я думаю, что в основном я хочу знать, есть ли лучший способ выразить «потребности», не повторяя его для каждого приложения, т. Е. Приложение необходимо создать, прежде чем его можно будет развернуть вручную. Я мог бы это сделать needs: ['${NAME}:Build'] , но для этого требуется $NAME:Build , чтобы шаг действительно существовал.

Пожалуйста, помогите, о коллективная мудрость Интернета.

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

1. Находятся ли приложения каждое в своем собственном репозитории git? Или все они находятся в одном и том же репо?

2. @AdamMarshall, Они в одном репо.

3. Для этого есть открытая проблема, gitlab.com/gitlab-org/gitlab/-/issues/254821 , который, к сожалению, в настоящее время все еще ОТКРЫТ…