GitLab CI 和 MsBuild(带测试)
GitLab CI and MsBuild (with tests)
我正在使用 GitLab 将我的 svn 存储库迁移到 git。
现在看到有 GitLab 的持续集成实现 CI 就想试一试。
我已经安装并配置了一个 Runner,但是 Gitlab 抱怨我没有 .gitlab-ci.yml
文件。
我已经使用 TeamCity 进行持续集成,所以我不想花太多精力编写构建脚本。
谁能告诉我在哪里可以找到 gitlab-ci.yml
文件的基本示例,该文件基本上只是构建我的解决方案并运行所有测试 (MSTests)?
显然没有简单的 msbuild 示例,但这应该可以帮助您入门:
variables:
Solution: MySolution.sln
before_script:
- "echo off"
- 'call "%VS120COMNTOOLS%\vsvars32.bat"'
# output environment variables (usefull for debugging, propably not what you want to do if your ci server is public)
- echo.
- set
- echo.
stages:
- build
- test
- deploy
build:
stage: build
script:
- echo building...
- 'msbuild.exe "%Solution%"'
except:
- tags
test:
stage: test
script:
- echo testing...
- 'msbuild.exe "%Solution%"'
- dir /s /b *.Tests.dll | findstr /r Tests\*\bin\ > testcontainers.txt
- 'for /f %%f in (testcontainers.txt) do mstest.exe /testcontainer:"%%f"'
except:
- tags
deploy:
stage: deploy
script:
- echo deploying...
- 'msbuild.exe "%Solution%" /t:publish'
only:
- production
弄清楚哪些测试要 运行 有点棘手。我的约定是每个项目都有一个文件夹测试,其中测试项目以架构 MyProject.Core.Tests 命名(对于名为 MyProject.Core 的项目)
作为对gitlab的第一次反馈-ci
我喜欢简单city 和源代码管理集成。但我希望能够在执行前修改脚本(尤其是在更改脚本时 ci 盟友),但我可以成像 re运行 a specific 提交并注入变量或更改脚本(我可以通过 teamcity 做到这一点)。或者甚至忽略失败的测试并重新运行 脚本(我在 teamcity 中经常这样做)。我知道 gitlab-ci 对我的测试一无所知我只有一个命令行 returns 一个错误代码。
作为 的附录,我想为测试阶段脚本建议一个更简单的替代方案:
variables:
SOLUTION_DIR: "MySolution"
BUILD_DIR: "Release"
TESTER: "vstest.console.exe" # or "mstest.exe /testcontainer:"
before_script:
- call "%VS120COMNTOOLS%\vsvars32" # import in path tools like msbuild, mstest, etc using VS script
test:
stage: test
script:
- for /f %%F in ('dir /s /b %SOLUTION_DIR%\%BUILD_DIR%\*Tests.dll') do set dllPath=%%F
- "%TESTER% %dllPath%"
这将对找到的所有测试项目二进制文件启动测试,这些二进制文件按照惯例在构建目录中以 *Tests.dll
结尾。这样做的好处是不使用中间文件。
这是我最终使用的。它 运行 是单个 运行 中的所有 *Tests.Dll。
dir /s /b *.Tests.dll | findstr /r bin\Debug > testcontainers.txt
for /f %%x in (testcontainers.txt) do set list=!list! %%x
set list=%list:~1%
vstest.console.exe %list%
自从打开这个问题后情况发生了一些变化(现在 MS 支持 core/linux docker 在 VS 中部署),我想我会分享我的解决方案。
# Default image is docker:stable
image: docker:stable
# Define deployment stages
stages:
- Test
- Build
# We use docker-in-docker (dind) for building docker images (build stage)
services:
- docker:dind
# Run unit test on dotnet core sdk image
test:
stage: Test
image: mcr.microsoft.com/dotnet/core/sdk:3.1
script:
- dotnet restore "${CI_PROJECT_DIR}/Project.Tests/Project.Tests.csproj"
- dotnet test "${CI_PROJECT_DIR}/Project.Tests/Project.Tests.csproj"
tags:
- docker
only:
- master
# Only build when testing passes, build using Dockerfile/dind
build:
stage: Build
# Print docker instance details for logging/diagnosing
before_script:
- docker info
- docker login registry.gitlab.com -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
script:
- docker build -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest .
- docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest
after_script:
- docker logout ${CI_REGISTRY}
tags:
- docker
only:
- master
when: on_success
这应该 运行 对您的解决方案进行 MS 单元测试,如果测试通过,则从中创建一个图像(前提是您在 gitlab-ci.yml 文件旁边有一个 Dockerfile)。如果您仅希望在提交时自动执行单元测试,请忽略构建阶段。
我正在使用 GitLab 将我的 svn 存储库迁移到 git。
现在看到有 GitLab 的持续集成实现 CI 就想试一试。
我已经安装并配置了一个 Runner,但是 Gitlab 抱怨我没有 .gitlab-ci.yml
文件。
我已经使用 TeamCity 进行持续集成,所以我不想花太多精力编写构建脚本。
谁能告诉我在哪里可以找到 gitlab-ci.yml
文件的基本示例,该文件基本上只是构建我的解决方案并运行所有测试 (MSTests)?
显然没有简单的 msbuild 示例,但这应该可以帮助您入门:
variables:
Solution: MySolution.sln
before_script:
- "echo off"
- 'call "%VS120COMNTOOLS%\vsvars32.bat"'
# output environment variables (usefull for debugging, propably not what you want to do if your ci server is public)
- echo.
- set
- echo.
stages:
- build
- test
- deploy
build:
stage: build
script:
- echo building...
- 'msbuild.exe "%Solution%"'
except:
- tags
test:
stage: test
script:
- echo testing...
- 'msbuild.exe "%Solution%"'
- dir /s /b *.Tests.dll | findstr /r Tests\*\bin\ > testcontainers.txt
- 'for /f %%f in (testcontainers.txt) do mstest.exe /testcontainer:"%%f"'
except:
- tags
deploy:
stage: deploy
script:
- echo deploying...
- 'msbuild.exe "%Solution%" /t:publish'
only:
- production
弄清楚哪些测试要 运行 有点棘手。我的约定是每个项目都有一个文件夹测试,其中测试项目以架构 MyProject.Core.Tests 命名(对于名为 MyProject.Core 的项目)
作为对gitlab的第一次反馈-ci
我喜欢简单city 和源代码管理集成。但我希望能够在执行前修改脚本(尤其是在更改脚本时 ci 盟友),但我可以成像 re运行 a specific 提交并注入变量或更改脚本(我可以通过 teamcity 做到这一点)。或者甚至忽略失败的测试并重新运行 脚本(我在 teamcity 中经常这样做)。我知道 gitlab-ci 对我的测试一无所知我只有一个命令行 returns 一个错误代码。
作为
variables:
SOLUTION_DIR: "MySolution"
BUILD_DIR: "Release"
TESTER: "vstest.console.exe" # or "mstest.exe /testcontainer:"
before_script:
- call "%VS120COMNTOOLS%\vsvars32" # import in path tools like msbuild, mstest, etc using VS script
test:
stage: test
script:
- for /f %%F in ('dir /s /b %SOLUTION_DIR%\%BUILD_DIR%\*Tests.dll') do set dllPath=%%F
- "%TESTER% %dllPath%"
这将对找到的所有测试项目二进制文件启动测试,这些二进制文件按照惯例在构建目录中以 *Tests.dll
结尾。这样做的好处是不使用中间文件。
这是我最终使用的。它 运行 是单个 运行 中的所有 *Tests.Dll。
dir /s /b *.Tests.dll | findstr /r bin\Debug > testcontainers.txt
for /f %%x in (testcontainers.txt) do set list=!list! %%x
set list=%list:~1%
vstest.console.exe %list%
自从打开这个问题后情况发生了一些变化(现在 MS 支持 core/linux docker 在 VS 中部署),我想我会分享我的解决方案。
# Default image is docker:stable
image: docker:stable
# Define deployment stages
stages:
- Test
- Build
# We use docker-in-docker (dind) for building docker images (build stage)
services:
- docker:dind
# Run unit test on dotnet core sdk image
test:
stage: Test
image: mcr.microsoft.com/dotnet/core/sdk:3.1
script:
- dotnet restore "${CI_PROJECT_DIR}/Project.Tests/Project.Tests.csproj"
- dotnet test "${CI_PROJECT_DIR}/Project.Tests/Project.Tests.csproj"
tags:
- docker
only:
- master
# Only build when testing passes, build using Dockerfile/dind
build:
stage: Build
# Print docker instance details for logging/diagnosing
before_script:
- docker info
- docker login registry.gitlab.com -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
script:
- docker build -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest .
- docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest
after_script:
- docker logout ${CI_REGISTRY}
tags:
- docker
only:
- master
when: on_success
这应该 运行 对您的解决方案进行 MS 单元测试,如果测试通过,则从中创建一个图像(前提是您在 gitlab-ci.yml 文件旁边有一个 Dockerfile)。如果您仅希望在提交时自动执行单元测试,请忽略构建阶段。