码迷,mamicode.com
首页 > 其他好文 > 详细

gitlab-ci配置疑难备忘

时间:2017-08-24 10:35:00      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:坚果云   nohup   project   文件   webdav   文件夹   tla   服务器   multi   

最近在自搭的gitlab服务器上加上了ci,大部份操作都比较顺利,但是也碰到一些问题抓狂,记录如下。

 

1、关于一个project配多个runner:在gitlab-ci里是支持的,但是含义确有点反常,

我之前认为是每个runner都会独立运行所有job,这样一来可以在不同的os上添加runner,以达到多平台测试的目的。

然而gitlab-ci实则对多runner的处理是当成一个资源池,由空闲runner来挑选job,那么build和test两个job可能会在不同的runner上运行,导致依赖错误。

如果只是为了多平台测试目的,可以把每个job复制多份,每份给一个不同的tag(os名),然后各os上的runner也有相应的tag,那么在分配时就会各取所需。

但是这样仍然有问题:

一是复制出来的那么多job已经在那里了,每轮pipeline必须都执行完,但一旦有一个runner不在线(比如说临时挂了或取消了),对应os的job就没人执行,整个pipeline就无法完成。

二是没有办法手动挑选部份os测试,可能某次提交只改了linux平台上相关代码,但是也要把所有平台测试runner跑一遍,非常费事,现在在cm msg里可以用[ci skip]来跳过整轮pipeline,但却没有其它指令来选择(或只跳过)部份jobs。

这一系列问题在gitlab官网上已经很多人提了issue及相关建议,希望在之后版本能改进吧。

https://gitlab.com/gitlab-org/gitlab-ce/issues/18041

https://gitlab.com/gitlab-org/gitlab-ce/issues/24610

 

2、如何让runner在本机启动一个长进程(不关闭的),比如说deploy job,就在本机部署运行?

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

技术分享

图中java进程是在运行的测试程序,它和上面启动它的各级bash的pgid是一样的。(https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/2231)

解决这个问题的简单办法,就是让目标进程以service方式启动,这样就彻底脱离了runner的进程组。(当然还有其它方案,最后再说,先把最难的一路回顾完)

然而跟着这一思路走下去,继续遇到各种问题:

a、首先做一个service用来启动目标进程,这是最基本的一步了。在ubuntu上,把控制脚本放到/etc/init.d里,用update-rc.d来注册服务。

b、要启停service,必须有sudo权限,然而runner在后台运行并没有终端用来输密码,怎么办?原来/etc/sudoers里面还可以配置NOPASSWD选项,可以让sudo不输密码,长姿势了。

c、用service来运行进程,用户是root,实际上又以-u方式切换成gitlab-runner这个专用账号,然而它是没有桌面的,因为登录桌面用的是自己的开发人员账号,要运行的是一个java awt程序,没有桌面的话会报错运行不起来,怎么办?原来可以通过共享.Xauthority文件的方式,让其它账号连接自己的桌面,具体则是要在运行java awt之前先导出DISPLAY和XAUTHORITY两个环境变量:

技术分享

又长姿势了。

 

3、程序运行起来了,但是依赖的一些外部文件(不在git仓库)怎么办?

这些外部文件,可能还会变化,不能每次都手动去拷,需要自动同步过来。

目前办法是利用坚果云,开发者在自己电脑上,把需要的依赖文件都放在坚果云同步文件夹里,这样每当有更新,就会自动上传到坚果云服务器。

在ci机器上装一个坚果云客户端当然是最简单,但是也可以用挂载一个davfs的方式来通过webdav协议从坚果云服务器拉数据,更便于命令行操作。

 

gitlab-ci配置疑难备忘

标签:坚果云   nohup   project   文件   webdav   文件夹   tla   服务器   multi   

原文地址:http://www.cnblogs.com/wellbye/p/7421095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!