Я разрабатываю проект Python, в котором используется пакет owlready2. Для некоторых своих функций owlready2 явно делает вызовы типа java -jar ... через subprocess-пакет.
На моей локальной машине это работает нормально. Теперь я хочу настроить 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.
Что вам нужно, так это найти или создать образ Docker, который содержит наборы инструментов Python и Java, и сделать его доступным где-нибудь, чтобы Drone мог получить к нему доступ. Скорее всего, это будет на DockerHub, где вы можете создать учетную запись и использовать ее бесплатно. Я не знаю, есть ли уже на DockerHub образ, включающий оба набора инструментов. Я бы посоветовал вам зайти на веб-сайт DockerHub и найти такой образ. Если вы не можете его найти, вы можете создать собственный образ Docker, содержащий все, что вы хотите/нужно, отправить его в DockerHub, а затем сослаться на него в файле сборки Drone.
Следуя ответу @Steve, я создал собственный образ докера в репозитории: 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