对于一个项目,我有一个包含多个项目的 .NET Core 解决方案。这些项目有单独的单元测试项目。这是结构的样子:
- My Project
- Solution
- Project A
- Project B
- Test Project A
- Test Project B
- .gitignore
- .gitlab-ci.yml
我已经找到了构建和测试项目 A 和测试项目 A 的方法。现在我想为 B 做同样的事情。但这只是 4 个项目的情况,实际上我有 40 个项目。有没有一种聪明的方法来制作这个 yml 文件?做 40 份不同的工作似乎有点矫枉过正,而且工作量很大。
例如,在 Azure 中,您可以这样做:
- stage: build all projects in solution containing .Tests extension
tags:
- linux_docker
script:
- "cd ./*/**.Tests"
- "dotnet restore"
- "dotnet build"
如果您想单独测试每个项目(而不是仅仅针对解决方案文件运行
dotnet test
),您可以使用 GitLab CI Parallel Matrix 功能。
CI yaml 可能如下所示:
test:
stage: test
tags:
- docker
image: mcr.microsoft.com/dotnet/sdk:7.0-alpine
parallel:
matrix:
- PROJECT
- Test Project A
- Test Project B
script:
- dotnet test 'My Project'/Solution/'${PROJECT}'
这样 GitLab CI 将为您定义的每个矩阵变量创建一个作业,并为您提供环境变量中的内容。您也可以设置完整路径,而不仅仅是项目名称,但要小心在 linux 中引用任何包含空格的目录。