win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

无论百度还是谷歌上,利用gitlab的CI/CD以及自动化测试都是在linux系统下,对于很多使用windows平台,特别是使用宇宙第一IDE(Visual Studio)的选手们来说,相当的不友好了,这里分享一下博主呕心沥血的经验。

一.对于gitlab服务器的部署还有项目的创建,本文不在赘述,这里gitlab服务器是在本机还是其他电脑上都没有关系!!只要有一个gitlab账号,并且创建了一个项目即可。

二.接下来正式开始:

首先在gitlab中设置所有项目运行自动Devops:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

1.新建gitlab项目,拉下来,在文件夹内创建vs解决方案。

2. gitlab项目中设置,CI/CD选择Runner,查看手动设置specific Runner项中URL与注册令牌,后面gitlab runner注册需要

3.根据官网安装gitlab runner

4.注册gitlab runner

.\gitlab-runner.exe register --name my-runner --url http://gitlab.example.com --registration-token my-registration-token

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )

https://mygitlab.com/

Please enter the gitlab-ci token for this runner

xxx-xxx-xxx

Please enter the gitlab-ci description for this runner

my-runner

INFO[0034] fcf5c619 Registering runner... succeeded

Please enter the executor: shell, docker, docker-ssh, ssh?

shell

node:4.5.0INFO[0037] Runner registered successfully. Feel free to start it, but if it's

running already the config should be automatically reloaded!

此时刷新gitlab网页会发现,下面出现此项目已**的运行器:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

此时项目流水线还处于卡在build阶段:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

5.接下来需要编写配置文件,在git项目根目录下创建.gitlab-ci.yml

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

6.此时./gitlab-runner.exe run 会出现[session_server].listen_address not defined, session endpoints disabled  builds=0的错误,一定要把runner设置为 运行未标记的作业,

在runner右边编辑里:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

 

此时查看gitlab网页中流水线可以发现build阶段已失败,查看日志:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

搜索后提示大约是无restore命令缘故,实际上这里乱码返回的是用powershell调用命令返回的提示,可以自己通过powershell运行命令获得无乱码提示,这里重新配置.gitlab-ci.yml,改为:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

实际上就是去掉了''',查看流水线可以发现build成功

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

接下来是增加工程编译,注意vs的c++编译器在C:\Program Files (x86)\MSBuild文件夹里,有各个版本,这里需要注意5点,1是选择的版本要与解决方案选择工具集一致,否则会提示:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

2.是要注意这里路径包含(x86)因此yml里不能使用全路径,把对应编译器放在path环境变量里即可,例如本文将C:\Program Files (x86)\MSBuild\14.0\Bin放入环境变量。

3.把对应平台rc.exe对应路径也要放在环境变量里,例如本文的C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64和C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86

此时yml为:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

4.最后是如果有第三方库,一定要把第三方库也传到gitlab,否则会提示找不到lib;因为gitlab调用runner,编译是在runner文件夹下,runner文件夹下会复制gitlab上的文件来编译,而非使用本地的目录

5.gitlab构建中,每个stage会清空上一个stage的输出,因此为了防止测试stage时把构建stage结果清空,提示测试exe不存在,因此需要把输出文件夹设置为缓冲文件夹,因此最终yml为:

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试

 

可以看到最终测试运行成功,并正确提示单元测试失败:

 

win10下使用gitlab实现与VisualStudio的CI/CD并且自动化测试