当前,在我们的项目中,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
include:
- project: 'xxx/common-pipeline'
ref: x.x.x
file: '/.mvn-template.yml'
...
现在我想在此项目中加入一个特定于该项目的新阶段,例如合同测试
因此,合同测试应在软件包之后和集成测试之前进行。
因为这是特定于此项目的,所以不能包含在通用模板中。因此,需要将其包含在gitlab-ci.yml中。
无法弄清楚该怎么做。我以前曾在GitHub工作过,最近才开始在GitLab上进行项目。
我可以在通用模板中包含该阶段,但不在那里定义相应的作业。并在gitlab-ci.yml中包含Job定义?不知道这是否是正确的方法。可能会有更好的选择来处理这种情况。
请帮助。
答案 0 :(得分:0)
我认为,您可以通过2种不同的方式来做到这一点:
在模板文件中添加阶段contract-testing
,并在项目的.gitlab-ci.yml
中定义特定的作业。该配置将是有效的:gitlab将连接并扩展include / anchors,最后构建一个单独的gitlab-ci。 注意:您可以定义一个阶段,即使没有使用该阶段的作业(某种空白阶段),也不会产生错误。
如果您不想在引用include
的所有项目中都包含此“空阶段”,则可以将stages
移到模板之外,然后将其放入您项目的.gitlab-ci.yml
。像解决方案1一样,您需要在项目的.gitlab-ci.yml
中(而不是在模板中)定义作业。