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

时间:2020-09-08 21:48:17

标签: gitlab gitlab-ci

当前,在我们的项目中,gitlab-ci.yml包含一个通用的模板yml,其中包含默认阶段和作业定义。我想包括一个阶段和该项目的特定工作,这些工作需要在模板yml中定义的阶段之间运行。以下是代表我正在研究的方案的yml示例文件。

  1. .mvn-template.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
  1. gitlab-ci.yml
include:
  - project: 'xxx/common-pipeline'
    ref: x.x.x
    file: '/.mvn-template.yml'
...

现在我想在此项目中加入一个特定于该项目的新阶段,例如合同测试

  • 包装
  • 集成测试

因此,合同测试应在软件包之后和集成测试之前进行。

因为这是特定于此项目的,所以不能包含在通用模板中。因此,需要将其包含在gitlab-ci.yml中。

无法弄清楚该怎么做。我以前曾在GitHub工作过,最近才开始在GitLab上进行项目。

我可以在通用模板中包含该阶段,但不在那里定义相应的作业。并在gitlab-ci.yml中包含Job定义?不知道这是否是正确的方法。可能会有更好的选择来处理这种情况。

请帮助。

1 个答案:

答案 0 :(得分:0)

我认为,您可以通过2种不同的方式来做到这一点:

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

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