美文网首页
【总结】在Linux上用Jenkins部署指令集任务

【总结】在Linux上用Jenkins部署指令集任务

作者: 游学者夏纳 | 来源:发表于2020-12-01 22:33 被阅读0次

上周接了个老大的任务,有空搞一下Linux线上版本上的RaceServer,主要能方便编译和启动。项目里已经有了一个用Jenkins自动打游戏pc包的ci,那我也干脆也用Jenkins跑定时算了,反正我想了下如果又不懂的就可以去问下别人(虽然到最后自己搞定了)。

Jenkins安装

到手的是一个内网的一个低版本的CentOS,首先是装Jenkins。跑了下yum install jenkins发现不行,然后换了下清华源还是发现超时,同时发现原来用的阿里源,所以初步判断是GFW的问题,后面发现并不是,是没有设置key导致jenkins不在yum仓库里。跑下这两条就行

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins

但是后来发现清华源下载虽然每次会超时,但是会累积下载进度。而且总是开始快,后面就慢到超时- -。感觉是服务提供商的策略问题,和TCP的拥塞控制没半毛钱关系。所以在我这里的解决方法就是每次降速到零就ctrl-c,然后多跑几次就好了:D

(之前尝试过手动包安装,但是要配置的东西太多而且容易污染,所以能用包管理就用包管理。)

Jenkins部署

包安装的情况下就简单了,环境变量什么的已经帮你搞好了。记得在 /etc/sysconfig/jenkins改下端口别和线上服务器冲突了。默认不改的话应该是8080,然后一键service start jenkins就完事了,上浏览器看下Jenkins控制台。

你应该看到的界面

这里有一个小坑,jenkins界面登陆时候的账密也很奇怪,账号不是当前用户root而是固定的admin,密码也不是Jenkins里的给的/var/lib/jenkins/secrets/initialAdminPassword而是Linux上root的登录密码。我不知道是不是就我这样。(说出来你可能不信,这是我试出来的)

指令集

Jenkins启动以后先放一边。先把指令集写了,我大概需要这么几个shell:

./UpdateServer.sh       # svn up命令集
./BuildRS.sh            # cmake命令集
./StopRS.sh             # kill掉RaceServer
./CopyToServer.sh       # 复制下XML等东西到可执行文件目录下
./RestartRS.sh          # 启动RS(先杀掉已有的)

根据实际的情况,我差不多可以搞两个任务,一个按照上的12345跑一个自动定时任务(超级耗时),一个只是按照1345的重启任务(给策划更新表格,手动调用)。

这就是C++吗,i了i了

写指令集的过程是痛苦而漫长的,无脑试错就行了。

  1. 分享一个好用的kill命令ps -ef|grep RaceServer2|grep -v grep|cut -c 9-15|xargs kill -9
  2. cp -rf命令如果是文件夹a到文件夹b,如果b不存在会创建b,b存在会创建b/a,十分的无语。所以还是前面还是明确写成a/*指明是复制文件。
  3. win上写好的shell千万不要直接复制到Linux里,有个换行符的问题。我在试的时候不小心创建了一大堆奇怪名字的文件,搞了我好久的心态,关键是我那个cmake写的很长。。
  4. make clean的必要性体现于make不会检查.h文件的变更,不调clean的话是基本上是秒编,很纠结。但是是publish,所以没办法。

部署简单任务

Jenkins上创建新任务以后,直接切到构建触发器tab。其他的东西没必要管,版本控制工具用的是自己写的脚本(因为Linux上编译server时不需要其他多余的游戏资源,只更新相关部分就行,不然太大了。。),我只关心两个东西,其他全不管就行。

第一个是定时任务,格式在问号里写的很清楚:


7-23点每隔2小时跑一次

第二个是指令集,按顺序把你的shell排好就行。


定时任务

点保存以后就即时生效了。任务主页的下面可以看到每个构建的版本运行情况,可以看下控制台的输出是否和Linux上机时的测试一样。也可以通过点Build Now来立即创建一次工程。

任务主页导航

这里Jenkins的很多功能我都没用到,比如触发器什么的,可以给Git挂个钩子,提交时触发编译之类。但是对我来说主要的还是通过任务来组合指令集,来做一些简单的运维需求,已经够满足我的要求了。如果有新的需求(比如下载)到时候我在看吧,反正里面的说明很详细,每个子功能后面的展开的内容比整个网页还大。

现在想想,当年写的Linux命令集其实就是就是在对Jenkins的一种拙劣实现。费劲心力搞得东西还不如别人已经有的现成的东西,功能更全而且更健壮,唉……

相关文章

网友评论

      本文标题:【总结】在Linux上用Jenkins部署指令集任务

      本文链接:https://www.haomeiwen.com/subject/frnuwktx.html