【问题标题】:Getting error "cannot import name 'run_cli' from 'robot'" with Gitlab CI Runner使用 Gitlab CI Runner 出现错误“无法从'robot'导入名称'run_cli'”
【发布时间】:2021-12-13 09:51:52
【问题描述】:

我有一个像python -m robot --include staging_lp_items 这样的机器人命令,它可以在我的系统中完美运行。

当尝试在服务器机器上使用 GitLab 运行器(作为阶段脚本)运行时,会显示此错误:

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.9/site-packages/robot/__main__.py", line 25, in <module>
    from robot import run_cli
ImportError: cannot import name 'run_cli' from 'robot' (/usr/local/lib/python3.9/site-packages/robot/__init__.py)

我还要确保安装机器人,在主脚本之前返回pip list,并在服务器环境中安装robot以及requirements.txt文件中的其他要求。 这是系统配置:

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye

GitLab Yaml:

stages:
  - build
  - build_branch
  - test

variables:
  REGISTRY_IMAGE: ${CI_REGISTRY}/qa/${CI_PROJECT_NAME}
  GIT_IMAGE: ${CI_REGISTRY}/qa/${CI_PROJECT_NAME}


build:
  image: docker:latest
  stage: build
  before_script:
    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
  script:
    - echo image name $REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
    - docker build -t $REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG .
    - docker push $REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  rules:
    - when: manual


build_branch:
  image: docker:latest 
  stage: build_branch
  before_script:
    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
  script:
    - echo project image is ${GIT_IMAGE}
    - docker build --build-arg CI_COMMIT_REF_NAME=master -t $GIT_IMAGE:$CI_COMMIT_REF_NAME .
    - docker push $GIT_IMAGE:$CI_COMMIT_REF_NAME
  rules:
    - when: manual
  allow_failure: true

run_test:
  image: $GIT_IMAGE:$CI_COMMIT_REF_NAME
  stage: test
  script:
    - cat /etc/os-release
    - chmod +x ./.deploy/run-test.sh
    - ./.deploy/run-test.sh
  rules:
    - when: manual
  allow_failure: false

有 3 个阶段, build 和 build_branch 工作正常。最后一个是我遇到问题的主要阶段。这个阶段将运行(评估)run-test.sh,它有一个我之前提到的简单 python-robotframework 命令。

Python 版本:3.9

Dockerfile

FROM python:3.9
ARG CI_COMMIT_REF_NAME=master
COPY . .
RUN pip install [Repository]
RUN pip install -r requirements.txt

【问题讨论】:

  • 您可能想在系统上添加 .yml 文件和 python 的版本,并简要说明您要尝试做什么。
  • is installed on the server environment 是同一个版本吗?你在使用 shell 执行器吗?它是否安装在 giltab-runner 正在运行的环境中?等等。
  • @Dev 在问题上添加了gitlab-ci.yml
  • @KamilCuk 是的,它们是一样的,版本。你可以看到 yaml 文件,我准确地解释了我正在尝试做的事情
  • image: $GIT_IMAGE:$CI_COMMIT_REF_NAME 它们在该 docker 映像中的版本是否相同?你使用的是什么 gitlab-runner 执行器?如果你在本地构建你的 docker 镜像并在那里运行你的脚本,你会得到同样的错误吗?请发布 Dockerfile 内容 - 请发布所有重现问题所需的文件,即。一个minimal reproducible example。如果您从 gitlab 容器注册表下载 docker 映像并在其中手动运行脚本,您会得到相同的错误吗?等等……

标签: python linux robotframework gitlab-ci gitlab-ci-runner


【解决方案1】:

您的 requirementst.txt 无效。你有robot 那里有https://pypi.org/project/robot/,而你要使用的库被命名为robotframework https://pypi.org/project/robotframework/。

在您的 requirements.txt 中将 robot 重命名为 robotframework。

【讨论】:

  • 我的 requirements.txt 中有 robot 和 robotframework。
  • 然后删除机器人并卸载它。
  • 谢谢KamiCuk。通过从需求中删除 robot 解决了该问题。
猜你喜欢
  • 2019-05-20
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2021-03-11
  • 2021-01-09
  • 2021-03-20
相关资源
最近更新 更多