Блог состоит в том, как создать некоторые пользовательские библиотеки Python и хранить их в качестве частных артефактов в DEVOPS AZURE, используя трубопроводы.
Мотивация
Работа в качестве архитектора ученых данных и облачных решений в моем стартапе Cortexbci. У меня была ответственность за проведение и опубликовать вашу мудрость Python SDK для разработки приложений для контролируемого мозга. Это была первая мотивация для меня, чтобы написать блог, чтобы упростить процесс хостинга пакетов Python в Azure DevOps для других разработчиков. Я прочитал несколько документов и блогов за то же самое, но тот, который помог мне много помогло, был в блоге, написанном Геральд Гюра , App Dev Manager, Microsoft. Блог, который я написал, сильно вдохновлен от него. Я принял VSCode в качестве основного IDE для кодирования, а также новые изменения в версии Azure DevOps.
Введение в Azure DevOps
Azure DEVOPS предоставляет услуги разработчика для групп поддержки планировать работу, сотрудничать по разработке кода, а также создавать и развертывать приложения. Azure DEVOPS поддерживает культуру и набор процессов, которые приносят разработчиков и менеджеров проектов и вкладчиков для завершения разработки программного обеспечения. Это позволяет организациям создавать и улучшать продукты более быстрыми темпами, чем с традиционными подходами к разработке программного обеспечения.
Услуги в Azure Devops
Настройка Azure DevOps
- Создайте проект в Azure DEVOPS
- Создайте репо для пакета Python
Вы можете использовать любые элементы управления версиями и хостинга кодов, такие как GitHub или просто создают репо в Azure Reppos в проекте DEVOPS, которые мы создали. В моем случае я собираюсь создать репо в Github
Настройка Python (локальная) среда
Откройте свой любимый IDE (я предпочитаю VSCode)
- Создайте локальный каталог для пакета Python
- Создать виртуальную среду Python
python3 -m devopsenv . source ./devopsvenv/bin/activate
- Клонировать ваше репо
git clone
- Установка требуемых пакетов Python
- питиш
- рулевое колесо
- шпагат
Кодирование и тестирование ваших пакетов Python
Кодирование пакетов Python
Пакеты в Python – это любой набор папок, а подпапки, которые имеют init .py файл в нем (каждая папка или подпапка должны иметь init .py файл, даже пустой).
Выберите имя для вашего верхнего пакета Python Выбрал значимый, но короткий (лучшее одно-слово). Я должен создать пакет Python под названием «Животные)
Теперь мы можем создавать подразделения. Я собираюсь создать разные животные в качестве подразделения (например, собака, кошка и т. Д.). Его функциональность может быть получена в виде животных.
Создать init .py файл для каждого подраздела. Вы можете написать вам функции прямо в init .py файл. Тем не менее, я предпочитаю писать их в отдельных файлах и группировать их по функциональности. Так что создайте функции .py под каждым подразделением и напишите методы под ним.
Внутри каждого __init__.py, написать
from .functions import *
Под собакой/функциями .py
def makesound(): return "Woof! Woof!"
Под кошкой/функциями .py
def makesound(): return "Meow! Meow!"
Тестирование пакетов Python
На уровне пакета Животные и животные Добавьте новую папку под названием Tests. В этой папке добавьте пустую init .py файл.
В папке «Тесты» добавьте файл Python вызываемый, test_ functions.py. Примечание. Очень важно префиксировать все ваши тестовые файлы с помощью «TEST_», он будет использоваться каркасом CI для идентификации файлов тестирования подразделения, которые необходимо запустить.
Внутри файла test_functions.py Добавьте следующее:
import pytest import animalsounds.dog as d import animalsounds.cat as c def test_doghi(): dogres = d.makesound() assert isinstance(dogres, str) def test_cathi(): catres = c.makesound() assert isinstance(catres, str)
Чтобы запустить тесты подразделения, используйте следующую команду
python3 -m pytest
Готовимся к развертыванию пакета Python
Есть несколько дополнительных файлов, которые нам нужно добавить. В корне (уровень приложения) добавьте следующие файлы:
- License.txt.txt. – Вы можете создавать при создании репо в Github
- Readme.md – описать пакет
- Mainest.in – это файл, используемый Packager для включения или исключения файлов. Теперь создайте файл и добавьте его к нему:
include README.md LICENSE
- setup.cfg – другой файл, используемый Packager. Создайте файл и добавьте следующее в качестве текста:
[metadata] license_files = LICENSE [bdist_wheel] universal=1
.pypirc – это важный файл. Оставьте этот файл пустым на данный момент.
Требования .txt – в этом файле мы добавим все пакеты, которые необходимо установить до нашего пакета, или что наш пакет зависит от. Добавьте следующее:
pip pytest wheel twine setuptools
- setup.py – это файл, где установка для создания пакета идет здесь. Обратитесь Это Больше подробностей
from setuptools import setup, find_packages with open('README.md') as f: long_description = f.read() setup( name = 'animalsounds', # How you named your package folder (TSIClient) packages = ['animalsounds'], # Chose the same as "name" version = '1.0.0', # Start with a small number and increase it with every change you make license='MIT', # Chose a license from here: https://help.github.com/articles/licensing-a-repository long_description=long_description, long_description_content_type='text/markdown', # This is important! author = 'Vivek Raja P S', # Type in your name author_email = 'vivekraja98@gmail.com', # Type in your E-Mail url = 'https://github.com/Vivek0712/azure-devops-pypackage', # Provide either the link to your github or to your website #download_url = 'https://github.com/RaaLabs/TSIClient/archive/v_0.7.tar.gz', # If you create releases through Github, then this is important keywords = ['Azure', 'DevOps', 'Python'], # Keywords that define your package best packages = find_packages("src", exclude=["test"]), classifiers=[ 'Development Status :: 3 - Alpha', # Chose either "3 - Alpha", "4 - Beta" or "5 - Production/Stable" as the current state of your package 'Intended Audience :: Developers', # Define that your audience are developers 'Topic :: Software Development :: Build Tools', 'License :: OSI Approved :: MIT License', # Again, pick a license 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.9', ], )
Окончательная структура проекта должна выглядеть так
Доработка трубопровода Azure DevOps и корма
Создание нового артефакта
Давайте начнем с создания нового корма для нашего трубопровода. Перейти к Azure DevOps> Артефакты> Создать новый канал. Дайте подходящее название и оставьте записку того же, так как нам понадобится позже.
Создание трубопровода для создания артефакта
Под трубопроводами -> создать новый трубопровод. Нам нужно настроить на конфигурацию конвейера, которая является процессом 4 шагов.
- Connect – подключиться к услуге хостинга репозитория кода
- Выберите – выберите пакет REPO
- Настроить – создать файл YML
Обзор – обзор, если все конфигурации сделаны правильно. И, наконец, запустите трубопровод.
Соединять
Пакет Python, который я планирую для размещения, находится в моем Github. Поэтому я собираюсь подключить мой Github с Azure Devops и разрешаю то же самое.
- Выбирать
Требуемый репозиторий выбран.
- Настроить
Под настройкой вкладки Выберите стартовый трубопровод, а затем в лазурных трубопроводах, используйте сценарий YML, данный здесь
- Обзор
Просмотрите и запустите трубопровод.
Настройка выпуска трубопровода
После того, как трубопровод запущен, он создает папку Dist в Repo Code, который имеет артефакт.
Чтобы настроить выпускной трубопровод для освобождения артефакта, который мы только что создали, перейдите в Azure DevOps> Трубопроводы> Выпуск трубопровода> Создать новый выпускной трубопровод.
Начните с пустого шаблона.
Выпускной трубопровод принимает артефакт и проходит через несколько этапов для публикации артефакта в соответствии с конфигурацией трубопровода.
Чтобы опубликовать пакет Python, мы собираемся выбрать артефакт сборки построения и создать сцену с одной работой с тремя задачами.
Выбор источника артефакта
Выберите трубопровод, который мы создали до источника артефакта.
Стадия трубопровода
Нажмите на сцену и дайте подходящее имя для того же. Нажмите на работу, а затем мы собираемся создавать три задания здесь. Добавить работу агента.
Задача 1: шпагат аутентификация
Поиск шпагата аутентификация на правой стороне и добавьте то же самое.
Задача 2: установка шпагата
Поиск командной строки и добавить ее. Назовите командный скрипт как Установка шпагата и добавьте следующее в скрипт
pip install twine
Задача 3:
Поиск командной строки и добавить ее. Назовите командный скрипт как Опубликовать артефакт и добавьте следующее в скрипт. Заменить С именем артефактного корма, который мы создали в первую очередь и с названием трубопровода
twine upload -r--config-file $(PYPIRC_PATH) d:\a\r1\a\ \dist\dist\*
Как только ваш выпускной трубопровод будет готов, сохраните его и запустите выпускной трубопровод. Для бега может занять пару минут.
После успешного запуска конвейера выпуска мы можем увидеть опубликованный артефакт в артефакте.
Использование пакета Python
Теперь, когда наш пакет Python опубликован, мы увидим, как его использовать.
Создать личный токен
В правом верхнем углу нажмите на свою учетную запись и создайте личный токен. Этот токен уверен, что пакет осуществляется только уполномоченными лицами, поскольку он является частным для организации.
Подключиться к Feed.
Как только личный токен сгенерирован, перейдите в артефакт и нажмите на наш артефакт нашего пакета Python. Нажмите Connect, чтобы подавать и выберите шпагат или PYPI в качестве издателя для одного и того же. Следуйте данным там шагам.
Установите пакет Python
После того, как этапы последуют, с подключенным токеном доступа и кормление, вы сможете установить и получить доступ к пакету Python.
Поздравляем, вы разместили ваш пользовательский пакет Python в Azure DEVOPS. Если вы достигли в конце статьи, следуйте, делитесь статьей.
Кроме того, проверить мою сессию на «Pysting Python Packages в Azure DevOps» в Microsoft Reactor
Оригинал: “https://dev.to/vivek0712/hosting-python-packages-in-azure-devops-1foo”