Windows下gitlab CI环境搭建
公司的项目代码用gitlab管理,不过发布体系建立混乱,需要统一的发布出口,研究了一下gitlab的CI/CD,把搭建的过程记录了一下。
Runner安装
Runner就是CI里Pipeline的job的执行者,一般情况下每一个项目都需要注册一个Runner。
Runner能够拉取代码(用的是Token的权限),然后在项目根目录下执行在.gitlab-ci.yml里的script脚本语句来实现编译、测试和部署等其他功能。
因为是编译windows下的exe和dll,打开Install GitLab Runner on Windows,只需要下载Windows的64版本即可,下载完成之后无需安装,找到一个位置创建一个英文目录,把下载的exe复制过去即可,注意这个目录就是runner的工作目录,后续不能再动了。
Runner注册
首先你的账户权限必须是Maintainer,否则无法获取Runner的注册token。

打开设置→CI/CD,展开Runner,找到URL和注册令牌,然后再Runner目录下执行:
.\gitlab-runner-windows-amd64.exe register --url 项目的URL -r 项目的Token -c config.toml --name Runner名称 --tag-list build --shell pwsh --executor shell
执行之后,命令行会再次需要确认刚才的配置输入,直接一直enter即可,然后执行安装runner服务:
.\gitlab-runner-windows-amd64.exe install
需要注意,此时启动Runner,会以默认system的身份执行,这会导致本来能编译的项目,再Runner里编译出错。gitlab-runner也支持指定用户,但是实测没有生效,原因未知。正确做法是win+R输入services.msc打开服务管理窗口,找到gitlab-runner服务,打开属性:

输入当前的用户名和密码,然后启动服务即可,此时再次打开你的项目CI/CD的Runner页面,可以看到:

说明已经注册成功。
编写CI流水线配置文件
在项目的根目录下创建.gitlab-ci.yml文件,复制如下内容到其中:
stages:
- build
- upload
cache:
paths:
- bin/Release/*.dll
- bin/Debug/*.dll
build_job:
tags:
- build
stage: build
script:
- devenv.com .\project.sln /rebuild Release
- devenv.com .\project.sln /rebuild Debug
upload_job:
tags:
- build
stage: upload
script:
- new-item -itemtype directory -path "$env:RELEASE_DIR/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME/Release" -force
- new-item -itemtype directory -path "$env:RELEASE_DIR/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME/Debug" -force
- copy-item -path bin/Release/*.dll -destination "$env:RELEASE_DIR/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME/Release"
- copy-item -path bin/Debug/*.dll -destination "$env:RELEASE_DIR/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME/Debug"
具体语法见GitLab CI/CD。
只简单分成了build和upload阶段,编译阶段利用devenv.com直接在命令行编译sln工程文件,编译完成之后把生成的动态库文件进行cache。不cache的话,会在build的job完成之后,立即清理生成的所有文件,无法保存编译好的动态库。upload阶段就是把编译好的动态库复制到其他地方,测试人员从这个统一的地方拿动态库进行测试和发布。
然后提交这个.gitlab-ci.yml文件到仓库,打开项目的CI/CD页面就能看到这个流水线正在被执行了。
git config -f ……错误
出现这个错误,升级最新的powershell即可。