我有一个带有一些后端 Java 和前端 Node.js 代码的 Gitlab 单声道存储库。为了创建 CI,我正在使用一种共享方法来构建这两个应用程序。
在应用程序存储库中,我们称它为“A”,我有源代码以及 .gitlab-ci.yml 文件,如下所示,
A
├── .gitlab-ci.yml
├── backendapi
└── ui
.gitlab-ci.yml文件,
---
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
当存储库“A”中的.gitlab-ci.yml文件运行时,它会调用存储库“B”中的top-level.yml、maven.yml和node.yml文件,这很好。
这里的问题是,当它运行java_build时,它无法从 maven.yml 找到backend_build函数,而是似乎只从 node.yml 文件加载frontend_build函数或从maven.yml文件覆盖backend_build函数。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
我知道我可以将所有函数复制到存储库“B”中的一个大 yml 文件中,并将 .gitlab-ci.yml 中的内容包含在存储库“A”中,但在这里我试图了解是否可以尝试上述方法。
提前致谢!