У меня есть конвейер Дженкинса,
Один из этапов конвейера - создание артефакта из кода Java-приложения.
Артефакт всегда получает имя hello-world - $ {BUILD_ID} .war с использованием переменной среды BUILD_ID jenkins для каждой сборки имя артефакта будет изменяться.
Затем у меня есть еще один этап, на котором я должен создать образ докера для этого артефакта.
Одна из строк файла Docker:
COPY hello-world-war-1.0.${BUILD_ID}.war /usr/local/tomcat/webapps/java-app.war
В этой строке я должен скопировать артефакт в образы докеров.
По какой-то причине упомянутая интерполяция не работает, и когда я запускаю конвейер, я получаю ту же ошибку:
COPY failed: stat hello-world-war-1.0..war: no such file or directory
Конечно, когда я жестко кодирую номер идентификатора сборки внутри Dockerfile, все работает хорошо.
Прилагаю скриншот всего Dockerfile.
Заранее благодарю за любую помощь !
Вы должны пройти BUILD_ID
как аргумент построения.
В твоем Dockerfile
:
ARG BUILD_ID
В твоем docker build
команда:
docker build ... --build-arg BUILD_ID="${BUILD_ID}" ...
Переменные среды, такие как ${BUILD_ID}
не передаются командам Dockerfile. Это добровольно, потому что docker build
должно быть максимально воспроизводимым, вне зависимости от контекста сборки. Если вам нужна переменная в процессе сборки, она должна быть установлена явно.