写点什么

Gitlab Runner 的分布式缓存实战

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:1480 字

    阅读完需:约 5 分钟

环境和版本信息

本次实战涉及到多个服务,下面给出它们的版本信息供您参考:


  1. GitLab:Community Edition 13.0.6

  2. GilLab Runner:13.1.0

  3. kubernetes:1.15.3

  4. Harbor:1.1.3

  5. Minio:2020-06-18T02:23:35Z

  6. Helm:2.16.1

部署分布式缓存

  1. minio 是兼用 S3 的分布式缓存,也是官方推荐使用的,如下图:



  1. minio 作为一个独立的服务部署,我将用 docker 部署在服务器:192.168.50.43

  2. 在服务器上准备两个目录,分别存储 minio 的配置和文件,执行以下命令:


mkdir -p /var/services/homes/zq2599/minio/gitlab_runner \


&& chmod -R 777 /var/services/homes/zq25


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


99/minio/gitlab_runner \


&& mkdir -p /var/services/homes/zq2599/minio/config \


&& chmod -R 777 /var/services/homes/zq2599/minio/config


  1. 执行 docker 命令创建 minio 服务,指定服务端口是 9000,并且指定了 access key(最短三位)和 secret key(最短八位):


sudo docker run -p 9000:9000 --name minio \


-d --restart=always \


-e "MINIO_ACCESS_KEY=access" \


-e "MINIO_SECRET_KEY=secret123456" \


-v /var/services/homes/zq2599/minio/gitlab_runner:/gitlab_runner \


-v /var/services/homes/zq2599/minio/config:/root/.minio \


minio/minio server /gitlab_runner


  1. 浏览器访问,输入 access key 和 secret key 后登录成功:



  1. 如下图,点击红框中的图标,创建一个 bucket,名为 runner:



  1. 至此,minio 已备好,接下来在 GitLab Runner 上配置;

GitLab Runner 上配置缓存

  1. 我这里是用 helm 部署的 GitLab Runner,因此修改的是 helm 的 value 配置,如果您没有用 helm,可以参考接下来的操作直接去配置 config.toml 文件;

  2. helm 下载了 GitLab Runner 的包后,解开可见配置信息如下:



  1. 打开 values.yaml,找到 cache 的配置,当前 cache 的配置如下图,可见值为空内容的大括号,其余信息全部被注释了:



  1. 修改后的 cache 配置如下图,红框 1 中原先的大括号已去掉,红框 2 中的是去掉了注释符号,内容不变,红框 3 中填写的是 minio 的访问地址,红框 4 中的是去掉了注释符号,内容不变:



  1. 上图红框 4 中的 s3CacheInsecure 参数等于 false 表示对 minio 的请求为 http(如果是 true 就是 https),但实际证明,当前版本的 chart 中该配置是无效的,等到运行时还是会以 https 协议访问,解决此问题的方法是修改 templates 目录下的_cache.tpl 文件,打开此文件,找到下图红框中的内容:



  1. 将上图红框中的内容替换成下面红框中的样子,即删除原先的 if 判断和对应的 end 这两行,直接给 CACHE_S3_INSECURE 赋值:



  1. 以上只是 cache 相关的配置,helm 部署 GitLab Runner 的其他设置还请自行处理,所有设置完成后回到 values.yam 所在目录,执行以下命令即可创建 GitLab Runner:


helm install \


--name-template gitlab-runner \


-f values.yaml . \


--namespace gitlab-runner


  1. 配置完毕,启动 Riglab Runner 成功后,一起来验证一下;

验证

  1. 在 GitLab 仓库中,增加名为.gitlab-ci.yml 的文件,内容如下:

设置执行镜像

image: busybox:latest

整个 pipeline 有两个 stage

stages:


  • build

  • test

定义全局缓存,缓存的 key 来自分支信息,缓存位置是 vendor 文件夹

cache:


key: ${CI_COMMIT_REF_SLUG}


paths:


  • vendor/


before_script:


  • echo "Before script section"


after_script:


  • echo "After script section"


build1:


stage: build


tags:


  • k8s


script:


  • echo "将内容写入缓存"

  • echo "build" > vendor/hello.txt


test1:


stage: test


script:


  • echo "从缓存读取内容"

  • cat vendor/hello.txt


  1. 提交上述脚本到 GitLab,如下图,可见 pipeline 会被触发,状态为 pending 是因为正在等待 runner 创建 executor pod:



用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Gitlab Runner的分布式缓存实战