【发布时间】:2020-01-28 17:46:40
【问题描述】:
我有一个带有一些后端 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函数,
.node_build: &node_build |-
function frontend_build {
cd ui
npm install
npm build
}
before_script:
- *node_build
当存储库“A”中的.gitlab-ci.yml文件运行时,它调用的是top-level.yml,maven.yml 和 node.yml 文件来自存储库“B”,这很好。
这里的问题是,当它运行 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”中,但在这里我试图了解它是否可能尝试上述方法。
提前致谢!
【问题讨论】:
-
这名字很奇怪。
node.yml->node_build->before_script->frontend_build(仅声明)->script->`fontend_build`(调用),为什么有这么多链?为什么不在.frontend_build: &frontend_build |-里面node.yml然后script: - *frontend_build? -
给定阶段的作业倾向于并行运行,因此如果您的作业依赖于先前作业的完成,我建议将作业 (java_build) 移动到build2 阶段或任何你想命名的东西
-
@KamilCuk 我在下面发布了答案或破解。感谢您的回复。
-
@Arty-chan 我在下面发布了答案或破解。感谢您的回复。
标签: gitlab gitlab-ci gitlab-ci-runner gitlab-omnibus gitlab-ce