Назад | Перейти на главную страницу

Как интерполировать переменные среды Jenkins внутри Dockerfile?

У меня есть конвейер Дженкинса,
Один из этапов конвейера - создание артефакта из кода 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 должно быть максимально воспроизводимым, вне зависимости от контекста сборки. Если вам нужна переменная в процессе сборки, она должна быть установлена ​​явно.