Я пытаюсь передать переменную из файла jenkinsfile в файл докеров. Итак, я запускаю команду запуска докера внутри jenkinsfile:
steps {
checkout scm
sh '''
echo ${GIT_BRANCH}
mkdir -p `pwd`/build_target
docker build -t android_build -f docker/Dockerfile.android .
docker run --env GIT_BRANCH=${GIT_BRANCH} android_build
ls -la `pwd`/build_target/*
'''
И попробуйте использовать переменную env внутри dockerfile:
FROM openjdk:8u212-jdk
USER root
ENV GIT_BRANCH $GIT_BRANCH
RUN echo ${GIT_BRANCH}
RUN if [ "GIT_BRANCH" = "develop" ] ; then echo 'develop' ; else if [ "GIT_BRANCH" = "master" ] ; then echo 'aster' ; fi
Но, к сожалению, это не работает и приводит к сбою конвейера, поскольку он не может получить env var. Что не так с моим кодом???
Dockerfile читается во время строки docker build; у него нет возможности считывать переменные окружения из будущего.
@DazWilkin просто неудачная копия моего кода, я отредактировал код
@DavidMaze извините, но я не понимаю, что вы сказали
Удалите последние две строки шага скрипта, и вы получите точно такую же ошибку; он никогда не достигает линии docker run.
@DavidMaze, я думаю, вы ошибаетесь, переменные среды можно передавать во время выполнения
Однако среда выполнения Dockerfile не еще до этого. Ничего из того, что вы передаете в команде docker run, не отображается в Dockerfile, потому что Dockerfile происходит первым.


Я закончил тем, что зафиксировал переменную во время сборки с помощью флага --build-arg, после чего я смог использовать ее внутри файла докеров. Надеюсь, это поможет кому-то когда-нибудь
В вашей команде
docker run ...отсутствует название изображения (android_build)