我的项目包含一个包含 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 更改的情况。有没有办法找到对所有目录进行编号的工作?考虑只在目录/用户界面之外进行更改
答案 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 作业也是如此。但是,如果我们对两者都进行更改,那么这两个作业都会在此阶段运行。
最后,我们在测试成功后部署应用。