如何在 gitlab-ci.yml 中合并或添加新阶段,其中包括带有默认阶段列表和作业定义的通用模板 yml

Jon*_*son 10 gitlab gitlab-ci

目前在我们的项目中,gitlab-ci.yml 包含一个带有默认阶段和作业定义的通用模板 yml。我想包含一个特定于该项目的阶段和相应作业,它需要在模板 yml 中定义的阶段之间运行。下面是示例 yml 文件,它们代表了我正在处理的场景。

  1. .mvn-模板.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)
  1. gitlab-ci.yml
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 定义?不确定这是否是正确的方法。也许有更好的选择来处理这种情况。

请帮忙。

Nic*_*ter 4

在我看来,你可以通过两种不同的方式来做到这一点:

  1. 在模板文件中添加阶段并在项目contract-testing中定义特定作业。.gitlab-ci.yml配置将有效:gitlab 将连接并扩展包含/锚点以在最后构建一个 gitlab-ci。注意:您可以定义一个阶段,即使没有作业使用该阶段(一种空阶段),也不会生成错误。

  2. 如果您不想在所有引用 的项目中包含此“空阶段” include,则可以将stages模板移到外部并将它们放入.gitlab-ci.yml项目的 中。与解决方案 1) 一样,您需要在项目中定义作业.gitlab-ci.yml(而不是在模板中)。