Gitlab就自带持续集成工具,而且很好用

开发 开发工具
“公司的代码资产,要放在公司内部。防止一切不可见的敌人,通过腐朽老套的方式,对公司的利益产生非法的侵占。”

[[357775]]

 本文转载自微信公众号「 小姐姐味道」,作者 小姐姐养的狗。转载本文请联系 小姐姐味道公众号。

“公司的代码资产,要放在公司内部。防止一切不可见的敌人,通过腐朽老套的方式,对公司的利益产生非法的侵占。”

SVN的年代,已经一去不复返,现在都用上了高大上的git。虽然有Gitea、Gogs这样更加轻量级的git代码托管平台,但目前应用最广泛的,还是gitlab。

搭建GitLab过程并没有想象中的简单,因为它是Ruby写的,又是依赖DB,又是依赖Redis,而且有权限要求。但这东西,也就折腾一次,剩下的就是享受它的功能了。

我们平常的开发中,不可或缺的有一些持续集成的需求。比起再部署一个jenkins,使用gitlab的CI功能,更加如丝般柔滑。

1. 一个样例

gitlab实现ci功能很简单,直接在仓库的顶层目录,创建一个.gitlab-ci.yml文件,就可以了。我们大多数的应用,就配置这样一个文件就OK了。

下面是一个vuepress项目的ci文件。

  1. image: xjjdog.cn:5000/node:8.16.2 
  2.  
  3. pages: 
  4.   tags: 
  5.     - pages 
  6.   cache: 
  7.     paths: 
  8.       - node_modules/ 
  9.  
  10.   script: 
  11.     - npm config set registry http://xjjdog.cn:8082/repository/npm-all
  12.     - npm install 
  13.     - npm run docs:build 
  14.   artifacts: 
  15.     paths: 
  16.       - public 
  17.   only
  18.     - master 

以上的脚本,将在每次提交代码到master的时候,自动触发执行。它将自动编译node项目,并发布到该发布的地方。

在左侧菜单,可以找到相关的菜单。

点击进入,可以看到执行的结果和操作人等等。码、包一体,是不是比jenkins更加直观?好用?

2. yaml文件

所以我们的工作内容,就全部集中到yaml文件的编写上。

你会发现,不论你是使用docker-compose,还是使用k8s,甚至是现在的Gitlab CI,你本质上,就是一个YAML工程师。

YAML工程师!是自动化时代先进生产力的代表。

我们来瞧一下.gitlab-ci.yml中的关键概念。其实从它身上,我们能够看到Makefile的一点影子。

  • images/services 这个关键字可以使用Docker的镜像和服务运行Job
  • only only是匹配的意思,比如上面只匹配master分支的提交和merge
  • stages 一个stages可以定义多个分段,用于定义一个pipeline的不同流程节点(job)
  • stage 表示一个stages的子项,一般用来给job定一个一个名字。比如,我们上面的pages,就是job的名字
  • cache cache用来定义一些需要在任务之间进行缓存的目录和文件
  • script 真正要执行的命令,可以是一个shell脚本。如果脚本执行不成功,流程就会终止
  • before_script,after_script用来定义前置和后置脚本
  • variables 自定义构建变量
  • artifacts 将生成的资源作为pipeline运行成功的附件上传,并在gitlab交互界面上提供下载。如果你发布的是一个静态目录,比如vuepress编译后的结果,这个是最合适的。
  • tags tags是Job的一个标记。

3. runner

这个tags是什么意思呢?当你第一次使用的时候,可能会因为它的配置错误,造成ci无法执行。

我们在左侧的菜单里面,找到全局的settings,里面也有一个CI/CD,其中有一个Runners选项,就是用来配置Runner锁关联的tag的。

也就是说,你需要安装一个叫做GitLab Runner的东西。它才是我们任务真正执行的节点。

安装完毕之后,需要执行gitlab-runner register注册进来。只有你在看到下面字样的时候,才证明你的tags为pages的任务能够执行。

从上面的描述中,我们就可以看出来,这个gitlab-runner,是分布式的,我们可是利用空间的机器,部署多个runner。所以,不用担心会对原gitlab服务器造成压力。

任务执行时间太长,一直挂着占用资源怎么办?

可以使用timeout来设置过期时间。

  1. JobName: 
  2.   script: restart 
  3.   timeout: 30m 

为什么gitlab可以作为一个比较理想的CI平台呢?

因为在它之上,有最原始的代码。有持续集成工具。有Wiki,甚至想要更高级的Pages,也有。

对于一个git项目来说,可以说你想要的,它都有了。而且所有的变更,都可以在一个普通的.gitlab-ci.yml文件里进行变更。可以说gitlab是一个十分锋利的工具了。

事实上,为了让操作更加柔滑,我们使用了gitlab的rest api。通过配置相应的token,就可以使用Java代码,控制gitlab的所有行为。

把它集成在自己公司的工具库里面,感觉是非常棒的。

作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

责任编辑:武晓燕 来源: 小姐姐味道
相关推荐

2019-04-18 10:35:30

持续集成工具Buddy

2012-02-23 10:22:03

JavaTeamCity

2011-05-12 14:11:12

2011-05-12 13:57:59

PHP持续集成

2017-02-27 18:24:34

交付开发工具

2023-03-19 11:47:57

Taro小程序持续集

2015-08-06 09:22:19

开源持续集成服务器工具

2017-02-27 18:35:23

集成交付部署

2016-08-05 17:19:37

持续集成持续交付系统运维

2017-10-19 09:47:55

容器化微服务集成

2021-03-31 09:00:00

管道集成工具

2018-01-12 08:29:11

持续集成工具

2009-06-14 18:05:58

ibmdwWebSphere

2015-07-27 11:32:24

Docker持续集成Docker部署

2015-09-24 09:43:08

阮一峰持续集成

2017-04-28 08:57:58

持续集成DevOpsC#

2017-03-01 08:56:28

VSTSTFSiOS

2011-09-15 09:21:46

持续集成

2015-09-29 10:08:26

DockerJava持续集成

2018-01-08 14:18:14

代码互联网持续集成
点赞
收藏

51CTO技术栈公众号