fabric8io docker -мавен-плагин в сборе и внешний артефакт - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь создать docker изображение из Maven, которое включает в себя артефакты из другого проекта Maven. Но примеры, которые я скопировал, похоже, не работают.

Я думаю, что проблема здесь в том, что я не очень понимаю, как работают сборки, и поэтому прошу помощи в том, что я хочу сделать здесь. Я создал надуманный простой пример того, что я пытаюсь сделать здесь:

https://github.com/sodved/java-docker-demo/tree/0.0.1-0

pom.xml
sod-java/pom.xml
sod-java/src/main/java/sodved/Sod.java
sod-docker/pom-depency.xml
sod-docker/pom.xml
sod-docker/src/main/docker/setup.sh
sod-docker/src/main/docker/Dockerfile
sod-docker/src/main/docker/run.sh

Итак, мой проект состоит из двух модулей:

  • sod- java, который создает исполняемый файл jar (который просто записывает файл в /tmp/sod.txt)
  • sod- docker, который создает альпийское изображение java с Dockerfile
    • setup. sh запускается при построении образа. Он запускает java, чтобы создать /tmp/sod.txt
    • run. sh - команда по умолчанию, записывает содержимое /tmp/sod.txt файла

До сих пор я пробовал два подхода к встроенному <assembly>:

  • https://github.com/sodved/java-docker-demo/blob/0.0.1-0/sod-docker/pom-depency.xml Была моя первая попытка. Использование dependecySet в сборке. Но я заметил, что зависимость даже не была включена в папку /target (я полагаю, потому что нет фактического кода java для компиляции в sod- docker, поэтому зависимости не были скопированы).
  • https://github.com/sodved/java-docker-demo/blob/0.0.1-0/sod-docker/pom.xml Была моя вторая попытка. Сначала он явно скопировал артефакт в папку /target (что сработало). Затем использовал file в сборке, чтобы попытаться скопировать файл.

В обоих случаях я не вижу jar-файла, скопированного где-либо сборкой или в tar-файле, который подключает docker создает и поэтому я получаю сообщение об ошибке при попытке сослаться на jar в команде Dockerfile COPY.

Я знаю, что пример немного надуманный. Но это просто и соответствует стандартному способу, которым мы делаем вещи на работе. Поэтому у меня нет большой гибкости в отношении инструментов, макетов и т. Д. c.

Реальный случай используется для создания образов базы данных. Получить базовый образ, запустить java код для управления базой данных, сохранить как новое изображение для последующего использования.

TLDR: Как указать groupId, artifactId, версию и получить соответствующий Артефакт включен в мое docker изображение. Сам источник docker не содержит java.

1 Ответ

0 голосов
/ 07 апреля 2020

ОК, разобрались.

Проблема заключалась в том, что пом. xml указал некоторую внешнюю конфигурацию

<external>
    <type>properties</type>
    <prefix>docker</prefix>
    <mode>override</mode>
</external>

Но в качестве документа здесь (http://dmp.fabric8.io/#property -configuration ) говорит, что это означает, что конфигурация <build> (включая мою сборку) в pom. xml будет игнорироваться. Я не уверен, почему наш стандарт использует внешнюю конфигурацию, будет преследовать наших специалистов по этому вопросу. Но удаляя этот <external> раздел и все работает.

...