从零开始阅读gitlab-runner源代码 001 编译

前言

gitlab-runner是当前炙手可热的一个CICD工具,和Gitlab集成非常好。之前在工作中应用了一下,效果相当理想。

为了进一步了解gitlab-runner的运行原理,打算学习一下gitlab-runner源码。

由于是零基础,所以打算把整个过程记录下来,包括每一步的思路,以便复盘;贻笑大方之处,欢迎评论区打脸。

安装Go开发环境

参考:centos下VSCode进行GO开发

由于编译必须用到docker,可以参考centos下安装vscode开发java,里面有docker安装的三种方式,以及镜像仓库的设置。

Gitlab相关资料

GO语法快速入门

下载代码

github

编译

编译helper

Gitlab-Runner在不同的操作系统、CPU架构下运行时,需要不同的helper镜像来辅助他。所以我们第一步先编译Helper镜像。

  • 我抬手就是一个make helper-bin helper-dockerarchive进行编译,提示要装gox

    • 安装gox:go get github.com/mitchellh/gox,指定平台,gox -osarch="linux/amd64"
  • 继续make,提示Docker experimental mode needs to be enabled for multi-platform build support. Aborting.

    • sudo vi /etc/docker/daemon.json,增加属性"experimental": true,重启systemctl restart docker
  • 继续make,提示read: connection reset by peer,如下图:
    docker pull error

    • 基本判断为镜像拉取失败,手动拉取docker pull alpine:3.12.0,解决问题。也可以其他站拉取后,打上tag:docker tag xxxx yyyy
  • 继续make,提示failed to load LLB: runtime execution on platform linux/arm64/v7 not supported
    platform_error

    • 查了一些资料,我想了三条路去尝试解决这个问题:1.装qemu,2.修改docker buildx 方式,3.直接修改make配置
    • 进行修改前,先调整一下编译速度,vi dockerfiles/runner-helper/Dockerfile,把RUN apk add注释了,等调通了再还原。或者使用mirror:RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
      1. 装完sudo yum install qemu-user,重启,同样的错误。
      2. env DOCKER_CLI_EXPERIMENTAL=enabled docker buildx ls查看旧的build,然后删除docker buildx rm、新增一个新的docker buildx create;然而还是同样的错误。
      3. 现在只能禁止编译arm/v7,修改ci/build_helper_docker,仅当linux/amd64时,才执行_docker_buildx,如下修改后,能够跳过。
if [[ ${platform} ==  "linux/amd64" ]];then
    trap cleanup_docker_context_trap ERR SIGINT SIGTERM
    setup_docker_context

    _docker_buildx build \
        --platform "${platform}" \
        --no-cache \
        --output "type=tar,dest=$TARGET_FILE" \
        --tag "gitlab/gitlab-runner-helper:$TARGET_ARCH-$REVISION" \
        dockerfiles/runner-helper

    trap - ERR SIGINT SIGTERM
    cleanup_docker_context
fi
  • 继续make,arm虽然没打镜像,但是会检查镜像是否生成,还是报错。
    • 直接找到Makefile.runner_helper.mk,将TAR_XZBINARIES的值,仅保留amd64
    • 最终编译完成。如下图:

helper success

总结下来:

  1. 安装gox
  2. docker开启experimental模式
  3. 提早下好需要的镜像
  4. Dockerfile中速度慢的指令,使用阿里mirror
  5. 修改Makefile.runner_helper.mk,减少编译量

编译runner

很简单,一个命令source ci/touch_make_dependencies && make runner-bin BUILD_PLATFORMS="-osarch='linux/amd64'"敲下去,无惊无险,直接成功。

runner success

完毕。

猜你喜欢

转载自blog.csdn.net/weixin_36572983/article/details/108205612
001
今日推荐