GitLab CI
众所周知在k8s的使用过程中,镜像构建无疑是绕不开的步骤,团队目前采用私有harbor存储 + jenkins构建的方式,然而除了jenkins使用的一些体验问题(交互简陋、需要手动点构建、响应速度慢),同时可能是由于研发团队多人同时在使用jenkins,镜像构建的速度也十分之感人,成为提升开发效率道路上最大的绊脚石。
出于两个目的:
提升镜像构建速度
实现代码提交或拉分支、打tag自动构建镜像
我用 gitlab-ci 自己搭建了一个镜像编译服务,跑在自己本地的工作电脑上,工作电脑是windows,我又装了一个windows sub system,系统是ubuntu 20.04,这样用于构建的服务器就有了。
到主题,gitlab-ci只需要基本的两个步骤来正常运行:
在工作电脑上需要安装gitlab-runner并且需要将你的gitlab-runner注册到gitlab上
在gitlab项目的根目录下创建.gitlab-ci.yml文件
第一步:安装gitlab-runner并注册
1、如果是ubuntu系统,直接用apt安装gitlab-runner
1 | apt update; apt install gitlab-runner |
2、注册你的gitlab-runner到gitlab上
首先需要获取gitlab的token,也有几种方式:
1、如果你有管理员权限,token一般在设置Overview > Runners可以找到
2、如果你是项目的管理员,token在项目设置Settings > CI/CD > Runners也可以找到
3、拿到token以后,执行以下操作注册你的gitlab-runner
ubuntu系统下输入:
1 | sudo gitlab-runner register |
依次会要求输入:
GitLab地址
上一步获取的token
runner的描述
标签(tag,后续项目的.gitlab-ci.yml会依此选定这个runner)
maintenance note,runner的说明
runner executor(比较关键,控制runner的执行方式,其实就是在runner所在的机器上用何种方式来执行你的指令,可选有docker、shell等,具体看这里),这里使用的是shell. 选择想要使用的shell类型,比如sh、bash、powershell等
其他操作选项,可以通过命令获取:
1 | gitlab-runner register -h |
当然也可以通过config.toml来配置这些内容,比如上面的配置可以用一份yaml来描述:
1 | concurrent = 4 |
4、配置文件一般放在/etc/gitlab-runner/config.toml,更加详细的配置信息,点这里
注册成功之后,在gitlab页面的CI/CD > Runners 页面上可以看到注册好的runner
第二步:项目根目录下使用.gitlab-ci.yml
其实就是此项目关于如何使用gitlab ci的配置文件,主要指明了:
使用哪个runner
runner如何执行
简单的一个配置文件来执行build命令
1 | stages: |
这个例子中build阶段的build-code任务执行时,打印一段内容并在项目根目录执行make指令,具体更详细的yaml配置内容,参见gitlab-ci.yml keyword reference | GitLab
第三步:让项目执行完成后通知
gitlab ci的构建过程是没有消息通知的,但我们需要一个通知机制,在提交代码或者merge之后,能够有工具提醒我们,这个工具可以是企业微信、钉钉、slack、邮件等等方式
在这个例子中,我们加入after_script,它表示一系列命令在任务运行完成之后执行,这里我们执行一个bash脚本
1 | stages: |
通常我们在bash脚本中,可以获取到git项目信息,提交人,提交的分支或者tag等,把这些信息通过特定工具提醒出来:
1 |
|
在执行脚本中可获取到的所有gitlab预置的环境变量,可以在Predefined variables reference | GitLab查询
以企业微信机器人为例,添加bot,就可以在企业微信里收到构建通知消息