如何在 drone.io 上使用 python 和 java?

How to use python and java on drone.io?

我开发了一个使用包 owlready2 的 python 项目。对于它的一些功能,owlready2 通过 subprocess-package.

显式地调用 java -jar ...

在我的本地机器上这工作正常。现在我想设置 CI 和 drone.io。

我现在的 .drone.yml 是这样的:

---
kind: pipeline
name: python-3-8

steps:
- name: test
  image: python:3.8
  commands:
  - pip install -r requirements.txt
  - pip install .
  - python -m unittest yamlpyowl.tests

在测试摘要中我得到错误:

...
File "/usr/local/lib/python3.8/subprocess.py", line 1702, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'java'

这很合乎逻辑,因为我使用图像“python:3.8”。

问题:如何让java在测试机上可用?

您必须使用的内容由您指定的 Docker 图像定义。您使用的是标准 python3.8 Docker 图片,因此您只有 Python 可用。

您需要找到或生成一个包含 Python 和 Java 工具集的 Docker 图像,并将其提供给 Drone 可以访问的地方。这可能在 DockerHub 上,您可以在上面创建一个帐户并免费使用。我不知道 DockerHub 上是否已有包含这两个工具集的图像。我建议您访问 DockerHub 网站并搜索这样的图像。如果你找不到,那么你可以创建一个你自己的 Docker 图像,其中包含你 want/need 的任何内容,将其推送到 DockerHub,然后在你的 Drone 构建文件中引用它.

根据@Steve 的回答,我在存储库中创建了一个自定义 docker 图像:carvk/java_python.

现在工作.drone.yml阅读

---
kind: pipeline
name: python-3-8

steps:
- name: test
  image: carvk/java_python:openjdk15_python38
  commands:
  - pip install -r requirements.txt
  - pip install .
  - python -m unittest yamlpyowl.tests