首页 > 解决方案 > 在 Jenkins Dockerfile 中安装 pip 时出现语法错误

问题描述

我正在 Jenkins 上进行培训,并创建了这个简单的 jenkins 图像,并添加了一些功能:

FROM jenkins/jenkins

USER root

# Install ansible
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python get-pip.py

RUN pip install -U ansible

# Install Docker

RUN apt-get update && \
apt-get -y install apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
   $(lsb_release -cs) \
   stable" && \
apt-get update && \
apt-get -y install docker-ce


RUN curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

RUN usermod -aG docker jenkins

USER jenkins

直到几天前,当我的 Jenkins 出现故障时,这一切都很好,现在当我尝试运行这个 Dockerfile 时,我收到以下错误:

Traceback (most recent call last):
  File "get-pip.py", line 24226, in <module>
    main()
  File "get-pip.py", line 199, in main
    bootstrap(tmpdir=tmpdir)
  File "get-pip.py", line 82, in bootstrap
    from pip._internal.cli.main import main as pip_entry_point
  File "/tmp/tmp0ZnKQ5/pip.zip/pip/_internal/cli/main.py", line 60
    sys.stderr.write(f"ERROR: {exc}")
                                   ^
SyntaxError: invalid syntax

构建故障转移第一个 RUN 命令。我检查了我没有任何拼写错误,并且 pip 没有更改安装链接。如果重要的话,我会在虚拟机上运行它,并通过 vscode ssh 登录。

标签: dockerjenkinsdockerfile

解决方案


这个语法:

    sys.stderr.write(f"ERROR: {exc}")

如果我没记错的话,最早出现在 python 3.6 中。看来您的代码现在使用的是旧版本。您的 Dockerfile 中可能会出现许多问题,为了节省您的时间,请在映像中打开 shell 并尝试手动执行命令:

docker run --rm -it --entrypoint="" jenkins/jenkins bash

推荐阅读