问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

kubernetes(k8s)Gitlab CI Runner 的安装

发布网友 发布时间:2022-11-25 07:47

我来回答

1个回答

热心网友 时间:2023-10-31 03:08

从 Gitlab 8.0 开始,Gitlab CI 就已经集成在 Gitlab 中,只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner ,即可进行持续集成。在介绍 Gitlab CI 之前,先看看一些 Gitlab CI 的一些相关概念。

Jobs->Stages->Pipeline

一次 Pipeline 其实相当于一次构建任务,里面可以包含很多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。任何提交或者 Merge Request 的合并都可以触发 Pipeline 构建,如下图所示:

Stages 表示一个构建阶段,也就是上面提到的一个流程。可以在一次 Pipeline 中定义多个 Stages,这些 Stages 会有以下特点:

Stages 和 Pipeline 的关系如下所示:

Jobs 表示构建工作,表示某个 Stage 里面执行的工作。可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:

Jobs 和 Stage 的关系如下所示:

如果理解了上面的基本概念之后,可能我们就会发现一个问题,我们的构建任务在什么地方来执行呢,以前用 Jenkins 在 Master 和 Slave 节点都可以用来运行构建任务,而来执行我们的 Gitlab CI 构建任务的就是 Gitlab Runner。

我们知道大多数情况下构建任务都是会占用大量的系统资源的,如果直接让 Gitlab 本身来运行构建任务的话,显然 Gitlab 的性能会大幅度下降的。GitLab CI 最大的作用是管理各个项目的构建状态,因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,更重要的是 Gitlab Runner 可以安装到不同的机器上,甚至是我们本机,这样完全就不会影响到 Gitlab 本身了。

安装 Gitlab Runner 非常简单,我们可以完全安装官方文档: https://docs.gitlab.com/runner/install/ 即可,比如可以直接使用二进制、Docker 等来安装。同样的,我们这里还是将 Gitlab Runner 安装到 Kubernetes 集群中来,让我们的集群来统一管理 Gitlab 相关的服务。

1.验证 Kubernetes 集群

执行下面的命令验证 Kubernetes 集群:

cluster-info这个命令会显示当前链接的集群状态和可用的集群服务列表。

2.获取 Gitlab CI Register Token

上节已经成功安装了 Gitlab,在浏览器中打开 hwzxgit.sinoing.net 页面,然后登录后进入到管理页面 http://hwzxgit.sinoing.net/admin ,然后点击导航栏中的Runner,可以看到该页面中有两个总要的参数,一个是 URL,另外一个就是 Register Token,下面的步骤中需要用到这两个参数值。
图一、

同样将 Runner 相关的资源对象都安装到kube-ops这个 namespace 下面,首先,通过 ConfigMap 资源来传递 Runner 镜像所需的环境变量(runner-cm.yaml):

要注意 CI_SERVER_URL 对应的值需要指向 Gitlab 实例的 URL(可以是*地址,也可以是 Kubernetes 集群内部的 Service DNS 地址,因为 Runner 也是运行在 Kubernetes 集群中的),并加上 /ci ( http://gitlab.kube-ops.svc.cluster.local/ci ),也可以是CI_SERVER_URL: " http://hwzxgit.sinoing.net/ci "此外还添加了一些构建容器运行的资源*,可以自己根据需要进行更改即可。
除了上面的一些环境变量相关的配置外,还需要一个用于注册、运行和取消注册 Gitlab CI Runner 的小脚本。只有当 Pod 正常通过 Kubernetes(TERM信号)终止时,才会触发转轮取消注册。 如果强制终止 Pod(SIGKILL信号),Runner 将不会注销自身。必须手动完成对这种被杀死的 Runner 的清理,配置清单文件如下:(runner-scripts-cm.yaml)

可以看到需要一个 GITLAB_CI_TOKEN,然后复制下图中的Gitlab CI runner token 来创建一个 Kubernetes secret 对象。将 token 进行 base64 编码:

然后接下来就可以来编写一个用于真正运行 Runner 的控制器对象,这里使用 Statefulset。首先,在开始运行的时候,尝试取消注册所有的同名 Runner,当节点丢失时(即NodeLost事件),这尤其有用。然后再尝试重新注册自己并开始运行。在正常停止 Pod 的时候,Runner 将会运行unregister命令来尝试取消自己,所以 Gitlab 就不能再使用这个 Runner 了,这个是通过 Kubernetes Pod 生命周期中的hooks来完成的。

另外通过使用envFrom来指定Secrets和ConfigMaps来用作环境变量,对应的资源清单文件如下:(runner-statefulset.yaml)

可以看到上面我们使用了一个名为 gitlab-ci 的 serviceAccount,新建一个 rbac 资源清单文件:(runner-rbac.yaml)

4.创建 Runner 资源对象

资源清单文件准备好后,直接创建上面的资源对象:

创建完成后,可以通过查看 Pod 状态判断 Runner 是否运行成功:

可以看到已经成功运行了两个(具体取决于StatefulSet清单中的副本数) Runner 实例,然后切换到 Gitlab Admin 页面下面的 Runner 页面:

至此,在kubernetes中安装Gitlab CI Runner结束,当然也可以根据需要更改 Runner 的一些配置,比如添加 tag 标签等。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕甲状腺激素偏高正常吗 怀孕检查甲状腺素偏高是什么原因引起的 怀孕了甲状腺功能偏高是怎么回事 怀孕甲状腺高是什么引起的 孕中期促甲状腺激素偏高是什么原因 重钢别墅靠谱吗 重刚别墅的致命缺点 重钢别墅的优点和缺点各是什么 积食可以吃什么 车子换了点火线圈,分缸线,火花塞以后车子打不着。这是什么原因 从飞利浦官网买的剃须刀有塑封吗 华为运动手表心率170 cpu的功能 CPU和GPU的比较 抖音碰到指尖就飞是什么游戏 我想问问雨露众德一级建造师培训权威吗? 电磁炉煮红薯用什么模式 平安普惠怎么接通人工 微粒贷逾期如何关掉自动扣费? 京东客户4.41下载版 怎样在ipad上使用京东数字音乐 京东lemusic 下载的音乐在哪里 我怎么找不到文件呢???在那里占用硬盘呢 ios坦克游戏中有一个英文名叫bettle? free style 和bettle什么意思 钢琴里的bettle是什么意思 bettle还是battle 非主流新年祝福语 卡罗拉双擎精英版轮胎更换,请教专业大神? 卡罗拉轮胎能不能换大 卡罗拉怎么换车胎 别里夫克的死,是自杀还是他杀说明理由 手机自己无缘无故的卡了重启了,是怎么回事呢? a4 尺寸是多少 如何求数据直方图中的众数和中位数 直方图里的中位数与众数怎么求 2013.11.13下午,东丽湖区津保铁路线上,一工人被一万伏高压电击中当场死亡,死者43岁武汉人 江苏男子偷电缆被电死,家属索赔百万遭驳回,如何从法律角度进行解读此案? 为什么交流电能电死人? 圆通速递“V”字开头的单号会不会比普通单号要快一点呢? 圆通快递单号是v开头的,这有什么表示吗,请细腻解答,谢谢 圆通VIP单号怎么查询谁帮我查一下! 圆通运单上有个 VIP 字样是什么意思? 运货单返回 泰国人是怎么过泼水节的啊? 小孩身上的疥疮是怎么治疗 小小的孩子身上就长了疥疮,该要怎么办 我孩子得了疥疮怎么办 2岁的宝宝得了疥疮怎么办 您好大夫我想咨询我儿子四岁了得了疥疮浑身痒怎么治疗 我小孩身上长了疥疮 如果染上疥疮,孩子会有哪些症状?通常采取的治疗措施是什么? 孩子身上长疥疮用什么药能好的快 中学体育课教案