Gitlab CI/CD 实践三:Docker 安装 Gitlab Runner

和k8s部署runner相比,Docker部署runner的优势

  • 缓存,项目里用到的各种依赖,不可能每次都重新下载。同时构建应用、语法检测等也会产生缓存文件。
  • 某个项目在k8s runner中使用分布式存储ceph来保存这些文件,大概700m。每次使用时特别慢,大部分时间都花在下载缓存,解压缓存,流水线结束时压缩缓存,上传缓存。
  • 整个流水线跑下来需要10多分钟,但如果用docker部署的runner,时间将减少到3分钟。主要原因是因为使用挂载本地目录的形式来保存缓存文件,而不是使用gitlab的缓存关键字,从而跳过了上面提到的下载、解压、压缩、上传缓存文件这几个耗时的步骤。
  • 当然在k8s中部署runner也可以选择挂载hostPath存储卷,不过那样的话,k8s灵活调度,充分利用资源的特性就用不到了。同时部署复杂度还提升不少,得不偿失。

docker-compose.yaml

version: "3.9"
services:
  gitrunner:
    image: 'gitlab/gitlab-runner'
    container_name: "gitlab-runner"
    restart: always
    volumes:
      - './data/config:/etc/gitlab-runner'
      - './data/cache:/tmp/cache'
      - './data/ssl:/etc/gitlab-runner/certs/'
      - '/usr/bin/docker:/usr/bin/docker'
      - '/var/run/docker.sock:/var/run/docker.sock'

创建挂载目录

mkdir -p data/config
mkdir -p data/cache
mkdir -p data/ssl
mkdir -p data/maven/.m2
mkdir -p data/go-mode/mod
mkdir -p data/data

配置Gitlab的https证书

如果 gitlab 是 docker 部署的,ssl 证书所在路径为:/etc/gitlab/ssl/xxx.com.crt

将证书放到ssl目录,整体结构为

.
├── data
│   ├── cache
│   ├── config
│   ├── data
│   ├── go-mode
│   │   └── mod
│   ├── maven
│   │   └── .m2
│   └── ssl
│       └── xx.xx.com.crt
└── docker-compose.yaml

创建runner容器

docker-compose up -d

注册runner

Gitlab Runner 有 3 种级别

  1. 全局共享
    1. 因为 executor 使用的是容器,不是 shell,所以非特殊要求,使用这个就行。如果是 shell,可能每个项目用到的环境不同,需要单独使用 runner
  2. 群组共享
  3. 项目独占

Runner 的并发性

  1. 每个 job 会单独起一个容器
  2. 不同流水线的 job 是并行处理
  3. 同一流水线同一阶段的 job 也是并行处理

获取 Gitlab CI Register Token

访问Gitlab全局 Runner 配置地址:https://{gitlab地址}/admin/runners

注册

docker exec -it gitlab-runner gitlab-runner register --non-interactive --executor "docker" --docker-image alpine:latest --url "https://xx.xx.com"  --registration-token "RQxx7UtMssiWyzWqtUMr" --description "172.30.7.17-docker-runner" --tag-list "x86,docker-runner,share-runner,172.30.7.17-runner" --run-untagged="true"  --locked="false"  --access-level="not_protected"

查看

访问全局 Runner 配置地址:https://{gitlab地址}/admin/runners

image-20220523174530380

配置runner

vim data/config/config.toml

修改并发数

concurrent:默认为1,结合服务器配置自行修改

挂载目录

用于每个流水线容器都会挂载的目录,实现缓存功能的关键。

[runners.docker]下的volumes更改为:

volumes = ["/opt/compose/gitlab-runner/data/cache:/cache","/usr/bin/docker:/usr/bin/docker","/var/run/docker.sock:/var/run/docker.sock","/opt/compose/gitlab-runner/data/maven/.m2:/root/.m2","/opt/compose/gitlab-runner/data/go-mode/mod:/go/pkg/mod","/opt/compose/gitlab-runner/data/data:/data"]
  • /opt/compose/gitlab-runner/data/cache:前面创建的挂载目录绝对路径
  • /usr/bin/docker:/usr/bin/docker,/var/run/docker.sock:/var/run/docker.sock:实现docker in docker,用于在流水线容器中打镜像

修改镜像拉取策略

  • 默认每次重新拉取
  • [runners.docker]下增加pull_policy = "if-not-present"
作者:Yuyy
博客:https://yuyy.info
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇