当前位置: 首页 > 科技观察

Gitlab自带持续集成工具,非常好用

时间:2023-03-12 21:51:07 科技观察

本文转载自微信公众号《小姐姐的味道》,作者小姐姐的狗。转载本文请联系品味小姐姐公众号。“公司的代码资产应该放在公司内部,防止一切看不见的敌人用腐朽老套的手段非法侵占公司利益。”SVN的时代一去不复返了,现在都用在高大上的git上。虽然有更多轻量级的git代码托管平台如Gitea、Gogs,但目前使用最广泛的是gitlab。搭建GitLab的过程并没有想象的那么简单,因为它是用Ruby写的,依赖DB,依赖Redis,还有权限需求。不过这东西也只是折腾了一次而已,剩下的就是享受它的功能了。在我们平时的开发中,一些持续集成的需求是必不可少的。与部署另一个jenkins相比,使用gitlab的CI功能更加丝滑。1.一个示例gitlab实现ci功能非常简单。只需在仓库的顶级目录下创建一个.gitlab-ci.yml文件即可。对于我们大部分的应用来说,配置这样一个文件就可以了。下面是一个vuepress项目的ci文件。image:xjjdog.cn:5000/node:8.16.2pages:tags:-pagescache:paths:-node_modules/script:-npmconfigsetregistryhttp://xjjdog.cn:8082/repository/npm-all/-npminstall-npmrundocs:buildartifacts:paths:-publicly:-master上面的脚本每次提交代码给master时都会自动触发执行。它会自动编译node项目并发布到该发布的地方。在左侧菜单中,您可以找到相关菜单。点击进入,可以看到执行结果和operator等,是不是比jenkins更直观?2.yaml文件所以我们的工作内容都集中在yaml文件的编译上。你会发现不管你用的是docker-compose,还是k8s,甚至是现在的GitlabCI,你本质上都是一个YAML工程师。YAML工程师!它是自动化时代先进生产力的代表。我们来看看.gitlab-ci.yml中的关键概念。其实从中,我们可以看出一点Makefile的影子。关键字images/servicescanuseDockerimagesandservicestorunJobonly表示匹配,比如上面只匹配master分支的提交和合并阶段。一个stage可以定义多个segment,分别用来定义一个pipeline的不同流程Node(job)stage代表stages的一个子项,一般用来给job起一个名字。比如上面的页面是jobcache的名字cache用来定义一些任务之间需要缓存的目录和文件script执行的命令可以是shell脚本。如果脚本执行不成功,进程将终止。before_script和after_script用于定义前后脚本变量自定义构建变量artifacts将生成的资源作为管道运行成功的附件上传,并在gitlab交互界面提供下载。如果你发布的是静态目录,比如vuepress的编译结果,这个是最适合的。tagstags是Job的标签。3.runner标签是什么意思?第一次使用时,ci可能会因为配置错误而无法执行。在左侧的菜单中,我们找到了全局设置,里面也有一个CI/CD,还有一个Runners选项,用来配置与Runner锁关联的标签。也就是说,您需要安装一个叫做GitLabRunner的东西。它是我们的任务实际执行的节点。安装完成后需要执行gitlab-runnerregister进行注册。只有当你看到下面的字样时,才证明你的以标签为页面的任务是可以执行的。从上面的描述我们可以看出这个gitlab-runner是分布式的,我们使用空间机来部署多个runner。所以,不用担心给原来的gitlab服务器造成压力。任务执行时间过长,一直占用资源怎么办?可以使用timeout来设置过期时间。JobName:script:restarttimeout:30m为什么gitlab可以作为一个理想的CI平台?因为在它上面,还有最原始的代码。有持续集成工具。有Wiki,即使您想要更高级的页面,也有。对于一个git项目来说,可以说你想要的应有尽有。所有更改都可以在一个通用的.gitlab-ci.yml文件中进行。可以说gitlab是一个非常犀利的工具。其实为了让操作更顺畅,我们使用了gitlab的restapi。通过配置相应的token,可以使用Java代码来控制gitlab的所有行为。将其集成到您公司的工具库中感觉很棒。作者简介:品味小姐姐(xjjdog),一个不允许程序员走弯路的公众号。专注于基础架构和Linux。十年架构,每天百亿流量,与你探讨高并发世界,给你不一样的滋味。我的个人微信xjjdog0,欢迎加好友进一步交流。