美文网首页
Debian 系统安装 Gitlab 持续集成环境爬坑史 - 呕

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

作者: 叛逆的青春不回头 | 来源:发表于2020-09-27 11:07 被阅读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())
    

     
    其他参考:

    相关文章

      网友评论

          本文标题:Debian 系统安装 Gitlab 持续集成环境爬坑史 - 呕

          本文链接:https://www.haomeiwen.com/subject/vqjquktx.html