Debian 系统安装 Gitlab 持续集成环境爬坑史 - 呕

2020-09-27  本文已影响0人  叛逆的青春不回头

导语:

  • 开发机信息:操作系统 Debian,CPU 8 核,内存 16 GB
  • 内容:主要记录安装环境中遇到的各种棘手坑及解决方案
  • 装后感:在放弃的边缘挣扎到成功...

 

一、GitLab Runner 安装与注册 - {\color{#32CD32}{\text{成功}}}

问题1:cannot execute binary file: Exec format error

原因:gitlab-runner 版本没安装对,需要安装 Debian 系统对应的 gitlab-runner。
解决方案:

  1. 官方安装方法:https://docs.gitlab.com/runner/install/linux-repository.html
  • 安装完成后执行 ​gitlab-runner register​,若报错 -bash: /usr/local/bin/gitlab-runner: No such file or directory,转到下面 2
  1. 若遇到上面的 No such file or directory 错误,按照 Gitlab-CI 初级篇 - Gitlab Runner 中的下载部分,执行一次 sudo curl --output /usr/local/bin/gitlab-runner ​https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64​ 即可,其他的不用看,重新执行 ​gitlab-runner register​
  2. 参考资料:

问题2:project runner is green, but builds are pending forever(已执行 gitlab-runner start)

原因:没弄太明白, 配置了3 次集成环境,每次解决方案都不同。第一次用下面的方案 1 成功,第二次方案 2 成功,第三次执行完 ​gitlab-runner start​ 直接就成功了。
解决方案:

  1. gitlab-runner 配置 tags - 未成功、成功都有
  2. 执行 ​gitlab-runner run​ - 成功
  3. 参考资料:

 

二、Python 3.6.1 的安装与使用 - {\color{#FF4500}{\text{失败}}}

为啥要安装 Python 3.6.1?因为开发机自带的 Python 版本为 2.7、3.5.3,项目 CI 脚本需要用到 Python 3.6+ 的特性,不安装无法正常执行...

问题1:python pip3 安装三方包 Could not find a version that satisfies...

原因:pip 版本过低;网不稳定,需用国内的镜像源来加速。
解决方案:

  1. 执行 python -m pip install --upgrade pip,若不成功转到下面 2
  2. 执行 pip3 install ${包名} -i ​http://pypi.douban.com/simple/​ --trusted-host ​pypi.douban.com
  3. 参考资料:

问题2:xxx 模块已安装,还是无法导入 xxx 模块 (项目中为 backoff )

原因:xxx 模块安装目录没对。当系统中有多个 Python 版本时,需用不同的 pip 命令来区分使用哪个 Python 版本进行安装三方包。
解决方案:

  1. Python2 安装三方包:pip install ${包名}
  2. Python3 安装三方包:pip3 install ${包名}
  3. 参考资料:

问题3:requests.exceptions.SSLError (Can't connect to HTTPS URL because the SSL module is not available)

原因:系统 openssl 已经安装了,python2 可以调用,新安装的 python3 不能调用,需要额外配置。
解决方案:

尝试了 n 种方法,直到系统不能工作,只能选择了放弃...

  1. 尝试1:安装 openssl 开发包 libffi-devel,失败
  2. 尝试2:重新安装 Python 3.6.1,./configure 添加--with-ssl、--with-openssl,失败
  3. 尝试3:Python 版本升级 3.8.5,配置 openssl 路径,失败
  4. 尝试4:修改 Python 源码目录下的 ./Modules/Setup 文件重新编译,失败
  5. 参考资料:

问题4:fatal error: openssl/aes.h: No such file or directory

原因:系统确少 openssl 开发包,需进行安装
解决方案:

  1. 执行 sudo apt-get install libssl-dev,安装 openssl 开发包
  2. 参考资料:

问题5:/usr/bin/apt-listchanges permission denied(sudo 无效)

原因:解决上面各种问题时,在开发机上进行了很多乱七八糟的操作,可能把什么系统文件搞坏了-_-||
解决方案:

  1. 尝试了下面 "参考资料"中的各种方式依然无效,apt 相关的操作都失败。最后只能选择重装系统...
  2. 参考资料:

{\color{#FF4500}{\text{整体安装宣告失败,重装系统重新再来!!}}}
 

三、Python 3.5.3 的使用 - {\color{#32CD32}{\text{成功}}}

问题1:-bash: pip: command not found

解决方案:

  1. Python2 执行:python -m pip ${包名}
  2. Python3 执行:python3 -m pip ${包名}
  3. 参考资料:

问题2:执行 python/python3 -m pip install xxx 报错 TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

解决方案:

  1. 执行命令加上后缀 -i ​http://pypi.douban.com/simple/​ --trusted-host ​pypi.douban.com​。如python3 -m pip ${包名} -i ​http://pypi.douban.com/simple/​ --trusted-host ​pypi.douban.com
  2. 参考资料:

问题3:import backoff 模块,开发机运行正常,但是 CI 脚本执行出错,无法 import

原因:Debian 系统中 dist-packages 取代了site-packages。使用 Debian 软件管理器安装的三方 python 包会被安装到 dist-packages 而不是 site-packages,这样能减少系统自带 python 和用户手动安装的 python 之间的冲突。若使用的是系统自带 python,都会从 dist-packages 中去读取软件包,而使用的 backoff 模块被安装到了 site-packages (详见不同安装方式的安装位置),识别失败。
解决方案:

🙈🤦‍♀️找不到参考资料,只能自己折腾找路子🙇‍♂️🧐
【1】查看 sys 的路径。图中可看出有 site-packages 和 dist-packages,可能跟这两个关系。

image
【2】查看 python 的库路径。使用的是 dist-packages。
image
【3】查看 site-packages 和 dist-packages 两个文件内容 diff。可以看到 backoff 相关的只在 site-packages 中有,项目的 CI 脚本 requests模块(dist-packages 目录中)是可以正常导入的,但 backoff 不能正常导入,推论将其移动到 dist-packages 目录中即可正常使用了。
image
【4】证实推论,将 backoff 相关的内容拷贝到 dist-packages 中。重新运行可以正常导入 backoff!
【5】查资料对比 dist-packages 和 site-packages 的区别:

问题4:使用 pipenv 出错 ImportError: No module named appdirs

原因:跟问题3 类似。因为在非 root 模式下使用 pip 安装的 pipenv,都被放在了 site-packages 中。
解决方案:

  1. 将 site-packages 目录中 pipenv 相关的库都拷贝或移动到 dist-packages 中去,即可正常使用 pipenv。

问题5:You can specify specific versions of Python with: $ pipenv --python path/to/python

原因:系统安装了多个 Python 版本并同时安装了 pipenv,使用时需指定 Python 版本
解决方案:

  1. 使用 pipenv 时指定 python 版本,如​python3 -m pipenv install --python 3.5​
  2. 参考资料:

问题6:使用 "f-string" 进行字符串拼接,报错 “invalid syntax”

原因:Python3.6+ 才支持用 "f-string" 拼接字符串
解决方案:

  1. 使用 Python3.6 版本以下支持的方式进行字符串拼接,如​'hello{}'.format('world')​
  2. 参考资料:

{\color{#32CD32}{\text{整体安装成功,Gitlab CI Pipeline 已成功运行在 Debian 系统上。}}}
{\color{#32CD32}{\text{💃此刻内心窃喜,重装 Python 3.6.1 说不定也能成功💃}}}

 
附:

// 查看 python sys 的路径
$ python3
>>> import sys
>>> print ('\n'.join(sys.path))

// 查看 python 的库路径
$ python3
>>> from distutils.sysconfig import get_python_lib
>>> print(get_python_lib())

 
其他参考:

上一篇下一篇

猜你喜欢

热点阅读