#docker #dockerhub
#docker #dockerhub
Вопрос:
У меня есть проект, в котором автосоздания DockerHub выполняются для каждой ветви проекта. Эти сборки выполняются нормально.
Я хотел бы расширить эту конфигурацию автоматической сборки, чтобы создавать образы для выбранных запросов на извлечение для этих ветвей.
В следующей документации указано, что переменная с именем DOCKER_TAG должна быть доступна в автосоздании DockerHub.
https://docs.docker.com/docker-hub/builds/advanced/#environment-variables-for-building-and-testing
Я хочу настроить свою автоматическую сборку следующим образом.
Если я попытаюсь создать тег с именем «pr1234», то моя сборка наложит код из PR # 1234 перед запуском сборки.
# Assign the env variable DOCKER_TAG to an arg of the same name
ARG DOCKER_TAG=${DOCKER_TAG}
...
# if DOCKER_TAG is in the format prNNNN then merge code for that PR on top of the current branch
RUN PRNUM=`echo ${DOCKER_TAG}| egrep "^pr([0-9] )$" | sed -e s/pr//` amp;amp;
if [ -n "$PRNUM" ];
then echo "Merging $PRNUM";
curl -o /tmp/pr.patch -L https://github.com/DSpace/DSpace/pull/$PRNUM.diff;
git apply /tmp/pr.patch;
fi
Если я запускаю свою сборку локально, я могу установить эту переменную, и моя сборка docker выполняется так, как я хотел бы.
docker build -t dspace/dspace:pr1234 -f Dockerfile.jdk8-test --build-arg DOCKER_TAG=pr1234 .
Когда я пытаюсь запустить это из Dockerhub, переменная DOCKER_TAG оказывается пустой, поэтому я предполагаю, что DOCKER_TAG устанавливается не так, как я ожидал.
Можете ли вы предложить способ доступа к этой переменной или выполнить автоматическую сборку для выбранных PR?
Ответ №1:
Я нашел решение, которое, похоже, работает. Я создал сборку с именем hooks/build и передаю переменную явно.
#!/bin/bash
docker build --build-arg DOCKER_TAG=$DOCKER_TAG -f $DOCKERFILE_PATH -t $IMAGE_NAME .
См https://docs.docker.com/docker-hub/builds/advanced/#custom-build-phase-hooks
Комментарии:
1. Спасибо за ваш ответ. Это помогает мне решить проблему.