基于windows配置gitlab-runner

时间:2024-03-11 09:08:02

基于windows配置gitlab-runner

  • gitlab-runner是配合gitlab ci/cd实现自动化部署的执行者,和Jenkins 类似,可以通过编写对应的.gitlab-ci.yml执行不同的job脚本。
  • 下面的基于shell模式下的场景

下载对应的gitlab-runner.exe文件

windows版本gitlab-runner

安装服务

准备安装目录

拷贝gitlab-runner.exe到创建好的gitlab-runner文件夹

安装服务

通过管理员模式运行cmd进入gitlab-runner所在目录

# 执行下面命令注册服务
./gitlab-runner.ele install -user ".\ENTER-YOUR-USERNAME" --password "ENTER-YOUR-PASSWORD"

注册完服务后,可以通过win+r执行service.msc查看服务列表里已经添加上该服务
这时gitlab-runner的服务启动方式是自动。这里意味着只要start过runner开机就会自动开启服务

--user字段

这里的user字段为可选字段,如果不写则默认使用本地系统,这里会导致一定概率找不到npm、node等服务。原因是如果你电脑的node服务安装位置是具体用户目录下的时候,系统执行的时候会找不到。所以这里user最好填写具体的用户。这样runner内就可以贡献该用户下所有资源。当然这里都是基于shell模式下说的。

注册服务到具体项目

这里的方式和mac、linux没有区别,按照提示填写对应的参数就可以了

./gitlab-runner.exe register

成功后,打开对应项目就可以看到这个runner了,不过图标还是感叹号,因为还没有启动

启动服务

./gitlab-runner.exe start

启动成功后项目那边就会显示绿色的标示了,这时就可以运行一个任务试试看了

停止服务

./gitlab-runner.exe stop

查看runner运行状态

./gitlab-runner.exe status

另一种启动服务的方式

这种方式允许可以让runner内执行命令和直接打开powershell执行命令一致,在某些特殊情况下可以用到

./gitlab-runner.exe run

作为electron编译机时遇到的问题

windows下的gitlab-runner编译时会遇到很多权限问题

所属用户导致的问题

上面说到了如果没有指定user的话默认是本地系统,有一定概率导致不能执行node、npm等服务,假设你没有遇到上面说到的问题,因为用户不一样的原因,所以资源是隔离的,因为electron编译的时候需要下载electron和electron-builder等依赖,这时就需要重新下载一次,如果没有通过配置淘宝镜像或vpn的话,首次安装基本失败。

代码签名失败

错误类型1

没有指定具体用户的话,基本会报After Private Key filter, 0 certs were left.异常,这个个人理解就是因为读不到u盘签名工具导致的, 应该是当前登陆用户是xxx,而runner登陆用户是本地系统,所以被过滤了。

错误类型2

选择了当前系统的user了,u盘签名工具也找到了,不过会报类似下面的错误

SignTool Error: An unexpected internal error has occurred.
The following certificates were considered:
After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected:
The following additional certificates will be attached:
Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-2147023673/0x800704c7)

这个错误是没有输入密码报的异常,如果之前已经输入过密码的话(一定时间内可以免输密码签名)就可正常编译,意思就是runner不能正常唤起输入密码的输入框。这里我尝试了很多种方法还是不能解决,不知道是不是我使用的代码签名软件winCodeSign版本不太对(我使用的是2.6.0版本)。反正最终还是放弃了

解决方式

修改启动方式

使用./gitlab-runner.exe run的方式,让runner执行环境和用户开发环境一致,不过这个的缺点是不会开机自启,而且是在终端打开的,所以为此我编写一个vbs的脚本,然后放在windows启动目录,这样就可以达到开机自启而且是后台运行的效果了。

CreateObject("Shell.Application").ShellExecute "cmd.exe","gitlab-runner.exe run","","runas",0

这里有必要解释下上面的几个参数。

# cmd.exe: 打开的具体应用,这里使用cmd
# gitlab-runner.exe run: 这里指打开cmd后输入的参数,这里就是执行gitlab-runner.exe run了,注意的是这里需要输入绝对路径比较好
# runas: 管理员权限运行
# 1: 是否后台运行(0:后台运行, 1窗口运行)

其它注意事项

需要把在服务里把gitlab-runer启动方式由自动改为手动

后记

这里初步实现了gitlab-runner里编译遇到的一些奇怪的权限和应用调用问题,不过还有一个不太方便问题就是弹出签名密码输入框的时候密码还得手动输入,这个环节就会让自动化流程断开。所以后面会引入python自动化输入密码签名。