前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我是这样考虑 gitlab ci 大文件构建依赖镜像的

我是这样考虑 gitlab ci 大文件构建依赖镜像的

作者头像
老麦
发布2022-12-24 09:44:13
5550
发布2022-12-24 09:44:13
举报
文章被收录于专栏:Go与云原生Go与云原生

需求简介:

现在要做某个 arm 平台的的交叉编译环境, 交叉编译依赖和工具包大小 5G 左右, 特别大。

如果按照以往的方式, 直接将 编译依赖和工具 直接打包到编译镜像中, 会有很多麻烦。

  1. 单 layer 过大 docker 单层 layer 限制为 5G。
  2. 镜像升级迭代 浪费空间 。如果镜像上层升级或者依赖变化, 整个 layer 不能复用。
  3. 如果将 编译工具 作为 FROM Image, 那各种语言的镜像又要自己封装, 不能与社区同步。

为了解决以上问题, 将 编译依赖和工具 作为外部 volumes 在 Runner JOB 运行时通过 只读方式挂载 , 作为编译环境的一部分。

思路大概就是这样了。

注册 docker runner

这里以项目 ATLAS500 的交叉编译环境为例, 搭建一个 docker runner

docker runner install

使用 alpine 的, 默认的 lastest 镜像很大, 2Gb 左右

代码语言:javascript
复制
# register a docker runner

docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine-v14.2.0 register

配置 runner 参数

可以在配置文件中改

代码语言:javascript
复制

Enter the GitLab instance URL (for example, https://gitlab.com/):
https://git.example.com  # 
Enter the registration token:
XXXXXXXXXXX  #
Enter a description for the runner:
[53cbe61e3bb7]: tangxin #
Enter tags for the runner (comma-separated):
tangxin #
Registering runner... succeeded                     runner=2u1np5ag
Enter an executor: docker-ssh+machine, custom, docker, docker-ssh, shell, ssh, parallels, virtualbox, docker+machine, kubernetes:
docker #
Enter the default Docker image (for example, ruby:2.6):
alpine #
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

更新 runner config 配置模版

配置中有一些注释

代码语言:javascript
复制
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "tangxin"
  url = "https://git.example.com"
  token = "XXXXXXXXX"
  executor = "docker"
  # environment 的设置都是字面值。只会被解析一次。
  # `ATLAS500_HOST_BIN=$DDK_HOME/host/bin` 不会扩展为 `ATLAS500_HOST_BIN=/root/atlas500/host/bin`
  # 变量会覆盖 PATH=/path/bin:$PATH。由于之前 PATH 未定义, 所以结果为 PATH
  environment = [
    # "PATH=$PATH",
    "DDK_HOME=/root/atlas500",
  ]

  # pre_build_script 是一个 shell script
  # """ 多行引号
  pre_build_script = """
    export ATLAS500_CROSS_BIN=$DDK_HOME/toolchains/Euler_compile_env_cross/arm/cross_compile/install/bin
    export ATLAS500_HOST_BIN=$DDK_HOME/host/bin
    export ATLAS500_HOST_LIB=$DDK_HOME/host/lib
    export ATLAS500_DEVICE_CROSS_BIN=$DDK_HOME/toolchains/aarch64-linux-gcc6.3/bin
    export LD_LIBRARY_PATH=$ATLAS500_HOST_LIB:$LD_LIBRARY_PATH
    export LC_ALL=C

    export PATH=$ATLAS500_CROSS_BIN:$ATLAS500_HOST_BIN:$ATLAS500_DEVICE_CROSS_BIN:$PATH
  """
  
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "alpine"
    # helper_image = "your gitlab runner"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    # 将宿主机上的 /root/atlas500 挂载到 job 中, ro 只读模式
    volumes = [
        "/root/atlas500:/root/atlas500:ro"
    ]
    shm_size = 0

  • 设置环境变量
  • 挂载目录

使用 docker-compose 启动 runner

代码语言:javascript
复制
# docker-compose.yml

version: '3.1'

services: 
  gitlab-runner:
    network_mode: host
    restart: always
    image: gitlab/gitlab-runner:alpine-v14.2.0
    # image: gitlab/gitlab-runner:v14.2.0
    volumes: 
      - /srv/gitlab-runner/config/:/etc/gitlab-runner
      # 注意这里要将 docker.sock 挂载, runner 在 ci 中才能使用 docker api 创建 job
      - /var/run/docker.sock:/var/run/docker.sock

测试 CI

正常搞就可以了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熊猫云原生Go 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注册 docker runner
    • 配置 runner 参数
      • 更新 runner config 配置模版
        • 使用 docker-compose 启动 runner
        • 测试 CI
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档