我正在开发一个使用 pyspark 的项目,并希望设置自动化测试。
这是我的 .gitlab-ci.yml
文件的样子:
image: "myimage:latest"
stages:
- Tests
pytest:
stage: Tests
script:
- pytest tests/.
我使用 Dockerfile 构建了 docker 镜像 myimage
,如下所示(参见 this excellent answer):
FROM python:3.7
RUN python --version
# Create app directory
WORKDIR /app
# copy requirements.txt
COPY local-src/requirements.txt ./
# Install app dependencies
RUN pip install -r requirements.txt
# Bundle app source
COPY src /app
但是,当我运行它时,gitlab CI 作业错误如下:
/usr/local/lib/python3.7/site-packages/pyspark/java_gateway.py:95: in launch_gateway
raise Exception("Java gateway process exited before sending the driver its port number")
E Exception: Java gateway process exited before sending the driver its port number
------------------------------- Captured stderr --------------------------------
JAVA_HOME is not set
我了解 pyspark 要求我在计算机上安装 JAVA8 或更高版本。我在本地已经设置好了,但是……在 CI 过程中呢?如何安装 Java 才能正常工作?
我已经尝试添加
RUN sudo add-apt-repository ppa:webupd8team/java
RUN sudo apt-get update
RUN apt-get install oracle-java8-installer
到创建镜像的 Dockerfile,但是得到了错误
/bin/sh: 1: sudo: not found
.
如何修改 Dockerfile 以便使用 pyspark 进行测试?
最佳答案
对我有用的解决方案:添加
RUN apt-get update
RUN apt-get install default-jdk -y
之前
RUN pip install -r requirements.txt
然后一切都按预期工作,无需进一步修改!
编辑
为了完成这项工作,我必须将我的基础镜像更新为 python:3.7-stretch
关于python - 涉及 pyspark 的 CI/CD 测试 - 未设置 JAVA_HOME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676684/