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

Каким образом лучше собирать и опубликовывать библиотеку из 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'а.

Спасибо.
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
Как уже подсказали в комментарии, правильнее будет код и данные для PyPI хранить на хосте, а библиотеку собирать в контейнере с монтированием этих данных и build-скрипта. Делать всё через Dockerfile - медленно (на каждый RUN - отдельный слой), любая CI система так или иначе код сама уже вытягивает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽