当目录外的文件完成时触发 CI 作业

时间:2021-03-10 15:10:22

标签: git gitlab gitlab-ci

我的项目包含一个包含 UI 相关代码的文件夹。对于我的测试,我有 API 测试和 UI 测试,我想触发具有特定场景的作业,如果 UI 目录中的更改运行 UI 测试,则可以仅使用标签来完成,

only:
    changes:
      - directory/UI/**/*

,然后我想在 API 更改时运行 API 测试。问题是我的项目有大约 20 个目录,只有一个包含 API 的 UI 有没有办法做到这一点,

only:
        changes:
          - directory1/project/**/*
          - directory2/project/**/*
          - directory3/project/**/*
          - directory5/project/**/*
          - directory6/project/**/*
          - directory7/project/**/*
          - directory8/project/**/*

我可以使用 except 但这仅适用于仅 UI 更改和仅 API 更改,但不适用于同时进行 API 和 UI 更改的情况。有没有办法找到对所有目录进行编号的工作?考虑只在目录/用户界面之外进行更改

1 个答案:

答案 0 :(得分:0)

如果您有一项 UI 更改工作

only:
  changes:
    - directory/UI/*

以及另一个 API 更改工作,例如:

only:
  changes:
    - directory/API/*
    - ...

然后,如果您将更改同时推送到 UI 和 API,两个作业都将在管道中运行。

这是一个完整的 .gitlab-ci.yml 示例(这只是一个愚蠢的示例,因为我不知道您的管道是做什么的):

stages:
  - build
  - test
  - deploy

Build The App:
  stage: build
  script:
    - # run some build steps like `npm ci`, `npm run build`, generating config files, etc.

Test UI Changes:
  stage: test
  only:
    changes:
      - /path/to/UI
  script:
    - # test the UI

Test API Changes:
  stage: test
  only:
    changes:
      - /path/to/API
  script:
    - # test the API

Deploy:
  stage: deploy
  when: manual
  script:
    - # deploy the whole app

在此示例中,API 或 UI 需要执行的任何构建步骤都发生在 build 阶段,无论是在一项工作还是多项工作中 - 这取决于您。由于我们分别测试 UI 和 API,因此测试阶段有两个作业,但只有在 UI 或 API 发生更改时才需要运行测试。如果我们只将更改推送到 UI,则只会运行该作业,API 作业也是如此。但是,如果我们对两者都进行更改,那么这两个作业都会在此阶段运行。

最后,我们在测试成功后部署应用。