Задать вопрос

Каким образом лучше собирать и опубликовывать библиотеку из Docker контейнера?

Привет, я сейчас работаю над задачей, где требуется собрать и опубликовать питон библиотеку из Docker контейнера на локальный pypi сервер. Я использую hatch библиотеку для паблишинга своей библиотеки.

Каким образом это правильно реализовать? Надо ли сначала мне запустить базовый питон контейнер, потом подключиться к нему, забрать код из гит-репозитория, собрать, протестировать и опубликовать? Какие еще есть варианты?

Моя текущая реализация заключается в следующем подходе. Я собираю и опубликовываю библиотеку, когда Docker создает новый образ (docker build ...) Вот мой Dockerfile:

FROM python:3.6.8-stretch

ARG PYPI_USERNAME
ARG PYPI_PASSWORD

RUN mkdir /code

WORKDIR /code

RUN echo "machine pypi.myserver.com\n\tlogin $PYPI_USERNAME\n\tpassword $PYPI_PASSWORD" >> ~/.netrc && \
    mkdir ~/.pip && \
    echo "[global]\nextra-index-url = https://pypi.myserver.com\ntrusted-host = pypi.myserver.com" >> ~/.pip/pip.conf

RUN echo "\n[distutils]\nindex-servers=\n    myserver\n\n[myserver]\nrepository: https://pypi.myserver.com/\nusername: $PYPI_USERNAME\npassword: $PYPI_PASSWORD\n" > ~/.pypirc

COPY . .

RUN pip install . && rm -r ~/.pip && rm ~/.netrc

RUN py.test

RUN hatch build && hatch release -r myserver -u admin
RUN rm ~/.pypirc

CMD [ "echo", "OK" ]


Потом я проверяю статус код последней отработанной команды ($?) и делаю вывод, прошло ли все успешно.

В конце, я удаляю все образы из Docker'а.

Спасибо.
  • Вопрос задан
  • 136 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Как уже подсказали в комментарии, правильнее будет код и данные для PyPI хранить на хосте, а библиотеку собирать в контейнере с монтированием этих данных и build-скрипта. Делать всё через Dockerfile - медленно (на каждый RUN - отдельный слой), любая CI система так или иначе код сама уже вытягивает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы