У меня есть моно-репозиторий Gitlab с некоторым внутренним кодом Java и внешним интерфейсом Node.js.Чтобы создать CI, я работаю над общим подходом к созданию обоих приложений.
В хранилище приложений, назовем его «A», у меня также есть исходный код .gitlab-ci.ymlфайл, как показано ниже,
A
├── .gitlab-ci.yml
├── backendapi
└── ui
.gitlab-ci.yml file,
---
include:
- project: 'root/B'
ref: master
file: 'top-level.yml'
- project: 'root/B'
ref: master
file: 'maven.yml'
- project: 'root/B'
ref: master
file: 'node.yml'
У меня есть другой репозиторий под названием «B», где у меня есть все моиФункциональные возможности CI в трех разных файлах.
B
├── maven.yml
├── node.yml
└── top-level.yml
- top-level.yml Файл, в котором находится мой этап сборки,
---
stages:
- build
variables:
GIT_SSL_NO_VERIFY: "1"
.build_script: &build_script
stage: build
tags:
- default
- docker
java_build:
<<: *build_script
image:
name: maven:latest
script:
- backend_build
node_build:
<<: *build_script
image:
name: node:slim
script:
- frontend_build
maven.yml , который имеет функцию построения mvn,
.maven_build: &maven_build |-
function backend_build {
cd backendapi
mvn clean package -DskipTests
}
before_script:
- *maven_build
node.yml , с функцией узла в нем,
.node_build: &node_build |-
function frontend_build {
cd ui
npm install
npm build
}
before_script:
- *node_build
Когда файл .gitlab-ci.yml в хранилище "A"выполняется, он вызывает файлы top-level.yml , maven.yml и node.yml из репозитория" B ", что хорошо.
Проблема здесь в том, что при запуске java_build он не может найти функцию backend_build из maven.yml вместо неепохоже, что он загружает только функцию frontend_build из файла node.yml или перезаписывает функцию backend_build из maven.yml . node_build работает должным образом, потому что он может найти функцию frontend_build .
the Skipping Git submodules setup
Authenticating with credentials from /root/.docker/config.json
Authenticating with credentials from /root/.docker/config.json
Authenticating with credentials from /root/.docker/config.json
$ function frontend_build { # collapsed multi-line command
$ backend_build
/bin/bash: line 90: backend_build: command not found
Я знаю, что могу скопировать все функции в один большойyml файл в репозитории «B» и включите в .gitlab-ci.yml в репозиторий «A», но здесь я пытаюсь понять, возможно ли даже попробовать вышеуказанный подход.
Заранее спасибо!