It's our wits that make us men.

windows下的CI Runner部署

Posted on By 刘电波

introduction

windows下的CI Runner部署,windows CI RUNNER 坑比较多,谨慎使用

一.下载

https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe 下载runner-windows

二 安装

安装 .`gitlab-runner install --user 用户名 --password` 密码

然后我们就可以看到,我们多了一个名为gitlab-runner的服务,如下图

三.注册

注册runner,首先要去项目拿到token,如下图

然后拿到我们的ca证书,http://certs.gitlab.info/ca-chain.cer 放到如下certs目录下面。

最后执行命令,注意一定要指定这些参数,不然后续会有很多奇怪的报错等着你。

.`gitlab-runner register --non-interactive --registration-token VakRXJhSqAC7hizMqsvr --url https://gitlab.bt/ --tls-ca-file E:\soft\gitLab\certs`\ca-chain.cer –name test-windows –tag-list test –executor “shell”

四.使用

使用runner,编辑.gitlab-ci.yml,含义是mater分支下的提交会指定到tag为test的runner下执行,也就是我们刚加的runner,输出hello。然后提交。

这里直接报错了,如下图

我们改下config的执行方式然后重启runner。shell = “pwsh” ==> shell = “powershell”,最后成功了。

五.注意事项

(1) shell选择要对,不然报错。

https://docs.gitlab.com/runner/shells/

(2) job长期卡死。

由于我的windows runner会启动一个长进程(持续存在的),但是runner每收到一个job,运行相应的命令,必须要等到该命令完成,以向上汇报运行结果,如果命令里启动了其它进程,也就必须等那些进程结束,一个长运行进程,自然就会卡住整个pipeline了。对于一些常用分离子进程的招数,如前面加nohup,后面加&,都不管用,其原因在于,runner监视自己启动的进程是用进程组的方式,即使脱离父子关系,组仍然存在。最终将我的长进程作为一个服务形式存在,彻底脱离runner进程组。