五.遇到的问题

1. cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs

报错信息:ERROR: Registering runner... failed runner=xxxxxxx status=couldn't execute POST against https://x.x.x.x/api/v4/runners: Post https://x.x.x.x/api/v4/runners: x509: cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs

原因:gitlab使用自签名证书时,注册时需要使用对应的ca根证书验证。

解决方案:注册时,使用"--tls-ca-file"参数,指定自签名的ca根证书。

2. certificate signed by unknown authority

报错信息:Post https://x.x.x.x/api/v4/runners: x509: certificate signed by unknown authority

原因:注册runner时,如果设置了"--tag-list",则"--run-untagged"默认为"false",同时间.gitlab-ci.yml中的job未指定tag触发此报错。

解决方案:注册时,"--run-untagged"参数设置为"true";或者在已注册的runner中修改勾选" Indicates whether this runner can pick jobs without tags";或者.gitlab-ci.yml中的job指定tag。

3. Peer's Certificate issuer is not recognized.

报错信息:fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.x.com/root/cmop.git/': Peer's Certificate issuer is not recognized.

原因:gitlab-runner拉取代码时,使用https协议访问gitlab,需要验证。

解决方案

# 参考:https://www.jianshu.com/p/fa71d97dcde0
# 因runner运行时的执行者是gitlab-runner账户,需要在gitlab-runner账号下设置访问https类网站时,免验证
[root@gitlab-runner ~]# su - gitlab-runner
[gitlab-runner@gitlab-runner ~]$ git config --global http."sslVerify" false # 查看
[gitlab-runner@gitlab-runner ~]$ cat /home/gitlab-runner/.gitconfig
[http]
sslVerify = false

4. dial unix /var/run/docker.sock: connect: permission denied

报错信息:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.27/info: dial unix /var/run/docker.sock: connect: permission denied

原因:gitlab-runner账号权限不足,不能访问/var/run/docker.sock。

解决方案

# 将gitlab-runner用户加入docker组
[root@gitlab-runner ~]# usermod -aG docker gitlab-runner # 查看
[root@gitlab-runner ~]# groups gitlab-runner

5. Couldn't resolve host 'gitlab.x.com'

报错信息:fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.cmop.chinamcloud.com/root/cmop.git/': Couldn't resolve host 'gitlab.x.com'

原因:executor = "docker"时,执行环境是1个容器,由于验证用的gitlab域名不能被dns解析,导致无法连接。

解决方案

  1. 在注册时使用"--docker-volumes /etc/hosts:/etc/hosts",将运行gitlab-runner服务主机的hosts文件映射到执行容器内;
  2. 注册时还可使用参数"--clone-url https://x.x.x.x",ip地址覆盖域名,执行容器使用ip地址直接访问gitlab。参考:https://docs.gitlab.com/runner/configuration/advanced-configuration.html#how-clone_url-works

    PS:使用ip覆盖域名时,可能会带来其他问题,如果使用的是自签名的证书,需要明确ip地址是否也被自签名的ca机构认证。

6. SSL certificate problem: unable to get local issuer certificate

报错信息:fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@100.64.135.200/root/cmop.git/': SSL certificate problem: unable to get local issuer certificate

原因:注册时,为使执行容器可访问不能被dns解析的gitlab域名,使用了参数"--clone-url https://x.x.x.x"覆盖了原域名,但ca机构(自签名的ca证书)只对域名做了认证,导致使用ip访问时不能认证。

解决方案:注册时,将运行gitlab-runner服务主机的hosts映射到执行容器内,使其可通过被ca机构认证的域名访问gitlab,而非ip地址。参考:https://gitlab.com/gitlab-org/gitlab-runner/issues/3477

Gitlab CI-3.遇到的问题的更多相关文章

  1. GitLab CI持续集成配置方案(补)

    上篇文章介绍了GitLab CI的持续集成配置方法,本篇文章将主要介绍NUnit的持续集成和遇到的一些坑 1.NUnit单元测试持续集成 下载NUnit.3.4.1.msi,https://githu ...

  2. GitLab CI持续集成配置方案

    目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 GitLab持续集成所需环境 2.4 需要了解 ...

  3. GitLab CI

    GitLab CI持续集成配置方案   目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 Git ...

  4. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

  5. Ubuntu Docker 安装和配置 GitLab CI 持续集成

    相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ...

  6. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)

    相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...

  7. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)

    上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...

  8. 当谈到 GitLab CI 的时候,我们该聊些什么(上篇)

    "微服务"这个概念近两年非常热,正在慢慢改变 DevOps 的思路.微服务架构把一个庞大的业务系统拆解开来,每一个组件变得更加独立自治.松耦合.但是,同时也伴随着部署单元粒度越来越 ...

  9. 当谈到 GitLab CI 的时候,我们都该聊些什么(下篇)

    上篇主要介绍了 GitLab WorkFlow 以及 CI/CD 做的事情,并且详细分析 GitLab CI 跟 Runner 信息交互是如何进行的.接下来将为大家讲解 Executor 的实现,再通 ...

  10. 手把手详解持续集成之GitLab CI/CD

    一.环境准备 首先需要有一台 GitLab 服务器,然后需要有个项目:这里示例项目以 Spring Boot 项目为例,然后最好有一台专门用来 Build 的机器,实际生产中如果 Build 任务不频 ...

随机推荐

  1. Linux系统 开通防火墙端口

    Redhat 7内核 Linux系统  开通防火墙端口 使用systemctl 1.查看防火墙状态,root用户登录,执行命令systemctl status firewalld 2.开启防火墙:sy ...

  2. 理解JVM——类加载机制

    我们在编写Java程序之后,会通过编译器得到一个class文件,这个class文件是如何与JVM进行配合的呢?类中的信息是如何变成JVM可以使用的Java类型呢?这些都是类加载机制做到的. 虚拟机把描 ...

  3. mysql通过“延迟关联”进行limit分页查询优化的一个实例

    最近在生产上遇见一个分页查询特别慢的问题,数据量大概有200万的样子,翻到最后一页性能很低,差不多得有4秒的样子才能出来整个页面,需要进行查询优化. 第一步,找到执行慢的sql,如下: SELECT  ...

  4. VC++中关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别

    而OnPaint()是CWnd的类成员,同时负责响应WM_PAINT消息. OnDraw()是CVIEW的成员函数,并且没有响应消息的功能.这就是为什么你用VC成的程序代码时,在视图类只有OnDraw ...

  5. vue-cli代理开发

    如何设置接口代理? 一.找到config文件下的index.js 二.找到dev里面的proxyTable他的值就是一个{},这里为了方便配置配置文件单独写成一个文件 dev: { env: requ ...

  6. oracle什么时候须要commit

    今天在oracle的SQL plus 中运行了删除和查询操作,然后在PL/SQL中也运行查询操作,语句一样,结果却不一样,让我大感郁闷,后来才突然想到可能是两边数据不一致造成的,可是为什么不一致呢,就 ...

  7. Google 历年笔试面试30题

    1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12(1).设计一个函数void g ...

  8. go学习笔记-环境安装

    环境安装 环境安装 主要包含三个部分 运行环境及开发sdk 系统环境和路径配置 IDE配置 以mac环境为例,其他环境类似 运行环境及开发sdk 使用 brew 安装 brew install go ...

  9. Scala_修饰符

    Scala访问修饰符和Java基本一样,分别有private.protected.public.默认缺省情况下,Scala对象的访问级别是public. 私有成员:用private关键字修饰的成员仅在 ...

  10. oracle rowid 研究

    SQL> create table tab01(id integer,val varchar(4)); Table created. SQL> insert into tab01 valu ...