目前在我们的项目中,gitlab-ci.yml 包含一个带有默认阶段和作业定义的通用模板 yml。我想包含一个特定于该项目的阶段和相应作业,它需要在模板 yml 中定义的阶段之间运行。下面是示例 yml 文件,它们代表了我正在处理的场景。
stages:
- build
- static-analysis
- unit-test
- package
- integration-test
compile:
stage: build
tags:
- docker
artifacts:
paths:
- target/
expire_in: 14 days
script:
- mvn $MAVEN_CLI_OPTS compile
interruptible: true
//and job definitions for - static-analysis
// - unit-test
// - package
// - integration-test
Run Code Online (Sandbox Code Playgroud)
include:
- project: 'xxx/common-pipeline'
ref: x.x.x
file: '/.mvn-template.yml'
...
Run Code Online (Sandbox Code Playgroud)
现在我想在这个项目之间包括一个特定的新阶段,比如合同测试
因此合同测试应该在打包之后、集成测试之前运行。
由于这是特定于该项目的,我无法包含在通用模板中。因此需要包含在 gitlab-ci.yml 中。
不知道该怎么做。我之前使用过 GitHub,最近才开始使用 GitLab 进行项目。
我可以在通用模板中包含该阶段,但不在那里定义相应的工作吗?并在 gitlab-ci.yml 中包含 Job 定义?不确定这是否是正确的方法。也许有更好的选择来处理这种情况。
请帮忙。
在我看来,你可以通过两种不同的方式来做到这一点:
在模板文件中添加阶段并在项目contract-testing中定义特定作业。.gitlab-ci.yml配置将有效:gitlab 将连接并扩展包含/锚点以在最后构建一个 gitlab-ci。注意:您可以定义一个阶段,即使没有作业使用该阶段(一种空阶段),也不会生成错误。
如果您不想在所有引用 的项目中包含此“空阶段” include,则可以将stages模板移到外部并将它们放入.gitlab-ci.yml项目的 中。与解决方案 1) 一样,您需要在项目中定义作业.gitlab-ci.yml(而不是在模板中)。