• gitlabrunner之坑


    原理

    runner支持多种excutor: shell, docker(eg. shell, docker, etc. (default: "docker") )
    runner通过调用shell或者token来执行命令,我选用的是docker。通过将/var/run/docker.sock挂载到runner容器内,runner使用unix协议调用docker api,在每个构建阶段分别启动容器来执行构建命令。每个构建阶段都是在容器内进行的,这个构建容器不是在runner内部的,而是调用docker api启动的容器,所以构建容器和runner本身的容器是平行的关系,不是父子关系,在使用时,很容易陷入误区认为它们是父子关系。

    问题

    私服中的基础镜像的拉取问题

    每个构建阶段都会使用一个基础镜像来启动容器,当这个基础镜像是在私服或者需要登录才能拉取时,就会出现报错:

    ERROR: Preparation failed: Error response from daemon: unauthorized: unauthorized to access repository: pdp/node, action: pull: unauthorized to access repository: pdp/node, action: pull (docker.go:142:0s)
    

    你可能会认为,未登录,那我在宿主机登录不就行了。但其实这不生效,可以试试。
    因为调用docker api去创建构建容器的时候,是需要带镜像拉取的auth认证的,所以这个认证需要在runner本身容器授予。

    方法就是在某一个机器上先登录

    docker login xxx -uxxx -pxxx
    

    然后获取auth信息

    cat ~/.docker/config.json
    

    这时没问题的话会输出一个json字符串,然后使用configMap或者config或者普通volume把这个文件挂载进runner的/root/.docker/config.json。重启runner,再次拉取就发现可以了。同理,在任何需要调用docker api创建容器的容器里面,放置这个文件,就可以拿到认证信息。

    还是这个问题,有个坑记录一下,当config文件的auth不止一个镜像仓库的时候,runner仅会获取到第一个auth,导致第二个auth失效。这时候你就会惊讶的发现,我明明已经设置了auth,但为什么还是无法拉取镜像,就是这个问题。

  • 相关阅读:
    VSTS For Testers读书笔记(20)
    VSTS For Testers读书笔记(16)
    VSTS For Testers读书笔记(18)
    SQL Delta数据库对比工具
    浦东海洋水族馆之行
    [ZZ]买易通与YY搜索宣布进行整合
    Web Service测试工具小汇
    给图片添加水印
    去除A和B数组中的交集
    EF 4.1+MVC3+Jquery Ajax+Json.Net+JqueryUI+IUnitOfWork+Repository 学习DEMO(暂停更新)
  • 原文地址:https://www.cnblogs.com/xiaojiluben/p/15931149.html
Copyright © 2020-2023  润新知